使用符合协议的 args 对象参数初始化新 class 实例

init new class instance with args object parameter which conforms to a protocol

我有 class 和 myModel.swift

的协议
public protocol IModelArgs{
    var name: String { get set};
    var surname: String { get set};
}

public class Model {
    var name: String;
    var surname: String;
    init(args: IModelArgs) {
        self.name = args.name;
        self.surname = args.surname;
    }
}

IModelArgs 是传递给模型构造函数的参数对象的协议。 在另一个文件中,我需要创建模型 class 的实例,但我无法将 args 对象传递给构造函数:我错了什么?

let myM = Model(args: ("T1","T2"));

你的情况的主要问题是 ("T1","T2") 是一个元组而不是符合你的协议的对象。在您的情况下,它应该如下所示:

struct ArgsObject: IModelArgs {
    var name: String
    var surname: String
}

let myM = Model(args: ArgsObject(name: "someName", surname: "someSurname"))

但是如果你只想使用协议将对象传递给构造函数,则不需要这样做。像这样为其创建 struct

struct ArgsObject {
    let name: String
    let surname: String
}

class Model {
    var name: String
    var surname: String

    init(args: ArgsObject) {
        self.name = args.name
        self.surname = args.surname
    }
}

let myM = Model(args: ArgsObject(name: "someName", surname: "someSurname"))

一些可选评论

不要使用 ;ISomething 这样的协议名称,它不是 Java