import RealmSwift
import Realm
public class Card : Object {
dynamic var username: String = ""
dynamic var firstName: String = ""
dynamic var lastName: String = ""
convenience init?(dictionary: [String:Any]?) {
guard let dictionary = dictionary , let username = dictionary["username"] as? String else { return else}
self.init()
self.username = username
self.firstName = firstName
self.lastName = lastName
}
required public init() {
fatalError("init() has not been implemented")
}
required public init( realm: RLMRealm, schema: RLMObjectSchema) {
fatalError("init(realm:schema:) has not been implemented")
}
required public init( value: Any, schema: RLMSchema) {
fatalError("init(value:schema:) has not been implemented")
}
}
Run Code Online (Sandbox Code Playgroud)
根据建议,我将变量设为var而不是var,并将其初始化为空字符串。最初,我拥有方便的init()以及init()。添加领域之后,便利的init()根据建议调用self.init()。现在默认实现要求抛出
(fatalError("init() has not been implemented")
Run Code Online (Sandbox Code Playgroud)
所需的公共init()中应该包含什么?我是否必须再次初始化变量?
正如我在对上一个问题的回答中提到的那样,通过将init?方法切换到便捷初始化器,不再需要从超类重写各种必需的初始化器。您可以简单地required public init从子类中删除这三个方法。
public class Card : Object {
dynamic var username: String = ""
dynamic var firstName: String = ""
dynamic var lastName: String = ""
convenience init?(dictionary: [String:Any]?) {
guard let dictionary = dictionary,
let username = dictionary["username"] as? String,
let firstName = dictionary["firstName"] as? String,
let lastName = dictionary["lastName"] as? String
else { return nil }
self.init()
self.username = username
self.firstName = firstName
self.lastName = lastName
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
642 次 |
| 最近记录: |