【问题标题】:Is there a way to declare a constant inside a computed property in Swift 3?有没有办法在 Swift 3 的计算属性中声明一个常量?
【发布时间】:2017-11-03 18:25:00
【问题描述】:

我的 Swift 3 代码中有几个这样的属性:

var dinActive: Bool {
    get { return UserDefaults.standard.bool (forKey: "bo", fallback: true) }
    set { UserDefaults.standard.set (newValue, forKey: "bo") }
}
var spdif1Active: Bool {
    get { return UserDefaults.standard.bool (forKey: "spdif1", fallback: true) }
    set { UserDefaults.standard.set (newValue, forKey: "spdif1") }
}

我想知道我是否可以使它更紧凑。例如,我会避免在 getter 和 setter 函数中重复字符串文字,例如 let s = "bo"。以某种方式可能吗?

另外,我想知道我是否可以将这种重复的模式制作成更短的代码,就像我可以使用类和泛型,或者使用 C 中的 #define 宏一样。不过,这可能最好单独提出题。如果您对此有任何建议,但尚未在 SO 上得到答复,只需添加评论,我会提出一个新问题。

【问题讨论】:

    标签: swift computed-properties


    【解决方案1】:

    你可以在你的类之外为它创建一个 let 常量。例如:

    //declaring constant outside of class
    let SPDif1Key: String = "spdif1"
    
    class YourClass
    {
        var dinActive: Bool {
            get { return UserDefaults.standard.bool (forKey: SPDif1Key, fallback: true) }
            set { UserDefaults.standard.set (newValue, forKey: SPDif1Key) }
        }
    }
    

    【讨论】:

    • 谢谢,这是显而易见的答案,但它破坏了我想要实现的位置。我应该指出这是我的问题中不受欢迎的答案。顺便说一句,不需要写“:String”,因为该类型是从字符串文字中隐式给出的。
    猜你喜欢
    • 1970-01-01
    • 2015-03-08
    • 2018-12-20
    • 2015-11-05
    • 1970-01-01
    • 2018-04-04
    • 2021-12-24
    • 2015-12-30
    • 2020-05-25
    相关资源
    最近更新 更多