如何创建需要设置实例变量的类?

时间:2016-03-23 03:23:08

标签: swift

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

我不想这样做。还有更好的方法吗?

2 个答案:

答案 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常数。