【问题标题】:SwiftRealm optional value with defaultSwiftRealm 可选值,默认值
【发布时间】:2018-04-01 20:41:06
【问题描述】:

我对 Realm 很陌生,但我想知道是否有办法将可选值的默认值设置为另一个变量。我知道这听起来很令人困惑,但我希望我的代码能够解释它。我的目标是创建具有多个类别的目录。如果用户没有为类别输入自定义,它将默认为最后一个路径组件(文件夹名称)。有人对如何做到这一点有任何想法吗?我正在考虑做@objc dynamic var name: String = (path as NSString).lastPathComponent,但它行不通。任何帮助表示赞赏。谢谢!

    class Category: Object {
    let name = (LinkingObjects(fromType: Category.self, property: "path") as NSString).lastPathComponent
    @objc dynamic var path = ""
    @objc dynamic var directory: Directory?
}


class Directory: Object {
    @objc dynamic var name = ""
    @objc dynamic var path = ""
    let categories = List<Category>()
}

【问题讨论】:

    标签: swift macos realm


    【解决方案1】:

    这不是Realm 问题,而是一般的 Swift 问题。您不能声明一个实例属性并为其分配一个您引用另一个实例属性的值的值,因为实例属性只能保证在初始化程序的末尾有一个值,但是当您声明一个实例属性时默认值,在初始化器之前被调用,所以不能保证其他属性已经有值。

    如果您需要 name 成为持久的 Realm 属性,您将无法使用其他实例属性来获取默认值,但是,如果您不需要在 @987654324 中持久化 name @,您可以简单地将name 设为lazy 变量,因此您将能够访问其他实例属性。

    lazy var name = (path as NSString).lastPathComponent
    

    【讨论】:

    • 那么如果我的Categories 类有变量名称:lazy var name = (path as NSString).lastPathComponent、路径:@objc dynamic var path = “” 和目录:@objc dynamic var directory: Directory?,用户可以添加自己的值吗?或者lazy var name: String = ((path as NSString).lastPathComponent)? 会使name 的值等于文件名可选?
    • 我仔细研究了一下,我想我找到了答案。如果我使用lazy var name: String = (path as NSString).lastPathComponentlazy var name: String? = (path as NSString).lastPathComponent,我想我可以将我自己的值添加到name,但我不确定是哪一个。
    • @AndrewWiggin 是的,name 的值可以更改,它只是根据path 实例属性自动分配的初始值。您实际上并不需要类型注释,但如果您真的想添加它,您可以通过 alt+单击变量来简单地检查实际类型,但它将是 String 类型。
    猜你喜欢
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多