使用符合协议的 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
我有 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