import RealmSwift
import Realm
public class Card : Object {
var username : String
var firstName : String
var lastName : String
init?(dictionary: [String:Any]?) {
guard let dictionary = dictionary , let username = dictionary["username"] as? String else { return else}
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")
}
}
我明白了:
'自'在super.init调用之前使用
我的班级工作正常。添加RealmSwift后,我得到了这些错误。如果我添加super.init()
,则会抱怨:
属性' self.username'没有在super.init调用
初始化
答案 0 :(得分:2)
因为您的属性是String。
来自apple docs ...
设置存储属性的初始值
在创建该类或结构的实例时,类和结构必须将其所有存储属性设置为适当的初始值。存储的属性不能保留在不确定的状态。 您可以在初始化程序中为存储的属性设置初始值,也可以通过将默认属性值指定为属性定义的一部分来设置初始值。以下各节介绍了这些操作。
您有两种选择:
1)
var username : String = ""
var firstName : String = ""
var lastName : String = ""
2)
var username : String?
var firstName : String?
var lastName : String?
答案 1 :(得分:1)
这里有几件事情。
首先,当adding custom initializers to subclasses of Object
时,必须将它们声明为便利初始化器。从子类中正确实现"terminal.integrated.cwd": ""
所需的初始化程序是不可能的,并且使用便利初始化程序无需尝试执行此操作。这也意味着您将从自定义初始化程序中委派Object
而不是self.init()
。
其次,存储的属性必须具有初始值。如果没有初始值,Swift编译器将不会为您的类合成初始值设定项(在这种情况下,是调用基类的super.init()
版本。)
最后,正如我在其他地方提到的,必须使用Swift的init()
修饰符声明类型String
的属性,以允许Realm拦截它们的get / set操作。
按照这些指导原则,您最终会得到类似的结果:
dynamic