如何使用Realm Swift Init

18

我正在尝试在Swift中使用Realm的init方法。我尝试了以下内容:

override init(value: AnyObject) { 
    super.init() 
    println("this is not called") 
} 

required init() { 
    super.init() 
    println("this is called") 
}

我希望能将一个对象传递到初始化函数中,但是我无法让第一个函数被调用。


您尝试调用此初始化程序时的代码是什么样子的? - Lance
你看到这个问题了吗?https://github.com/realm/realm-cocoa/issues/1849 - yoshyosh
3个回答

35

我的解决方案在Swift 3

自定义初始化器:

class Branches: Object {

    dynamic var key: String = NSUUID().uuidString
    dynamic var formattedAddress: String = ""
    dynamic var latitude: Double = 0.0
    dynamic var longitude: Double = 0.0


 convenience init(formattedAddress: String, latitude: Double, longitude: Double) {
    self.init()
    self.formattedAddress = formattedAddress
    self.latitude = latitude
    self.longitude = longitude
 }

 override static func primaryKey() -> String? {
    return "key"
  }
}

这是正确的方法。为了使Realm对象完全安全,必须调用self.init。 - soundsmitten

5

1

这是关于iOS 13Swift 5的答案。

说实话,我当时并不知道该怎么做,但最终通过以下方式使其工作:

class Account: Object {

    @objc dynamic var name: String = ""
    @objc dynamic var balance: Double = 0.0
    @objc dynamic var savings: Double = 0.0
    @objc dynamic var available: Double = 0.0


    init(name: String, balance: Double){
    
        self.name = name
        self.balance = balance
        self.savings = 0.0
        self.available = balance
    
    }

    required init() {
        //fatalError("init() has not been implemented")
    }
}

请记住,我完全是Swift新手(大约3个月),我不知道这样做的后果。但是我的项目运行良好。一切都被完美地保存和检索。


这样做是不安全的,因为重新实现 self.init() 会导致在使用某些功能时 Realm 的行为变得不可预测。请参见 @Zhanserik 的答案。 - soundsmitten

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接