【问题标题】:How to use Realm Swift Init如何使用 Realm Swift 初始化
【发布时间】:2015-06-26 23:55:55
【问题描述】:

我正在尝试将 init 用于 Swift 中的 Realm。我已经尝试了以下

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

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

我希望能够将一个对象传递给初始化程序,但是,我无法获得要调用的第一个函数。

【问题讨论】:

标签: swift realm


【解决方案1】:

我在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"
  }
}

【讨论】:

  • 这是正确的做法。必须调用 self.init 才能确保 Realm 对象的好处是完全安全的。
【解决方案2】:

Realm Swift 尚不支持覆盖 Object.init()Object.init(_:),但您可以关注 https://github.com/realm/realm-cocoa/issues/1849 以获取更新!

【讨论】:

    【解决方案3】:

    这是我对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 的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 2016-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多