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

时间:2017-05-20 16:19:31

标签: swift swift-protocols

我在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是传递给Model构造函数的arguments对象的协议。 在另一个文件中我需要创建Model类的实例,但是我无法将args对象传递给构造函数:我错了什么?

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

1 个答案:

答案 0 :(得分:3)

在你的情况下,("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