public class User : NSObject {
var id: Int //will throw an error during build
var name: String?
override init(){
}
convenience init(id: Int, name: String?){
self.id = id
self.name = name
}
}
我想创建一个用户类。 id
应该是非可选的。但是,除非我将行更改为:
var id: Int = 0
我不想这样做。还有更好的方法吗?
答案 0 :(得分:3)
删除convenience
这个词!便利与您想要的完全相反。您希望这是一个指定的初始化程序。像这样:
public class User : NSObject {
var id: Int
var name: String?
init(id: Int, name: String?){
self.id = id
self.name = name
super.init()
}
}
此强制用户的创建者提供id
,这正是您想要的。
答案 1 :(得分:1)
public class User {
let id: Int
var name: String?
init(id: Int, name: String? = nil) {
self.id = id
self.name = name
}
}
let user = User(id: 3) // works without errors
如你所见,我改变了一些事情。您可能并不真正需要继承NSObject
,并且我认为您不希望在初始化后更改用户的id
,因此它会使更有意义的是使它成为let
常数。