ios - 如何访问类常量和变量

标签 ios swift

为什么我不能在类级别对变量或常量执行操作?这是不允许的还是我需要使用关键字来访问它们?这是不好的做法吗?

Controller :

class ViewController: UIViewController {
    let one = 1
    let two = 2
    var sum = one + two
}

错误:

ViewController.Type 没有名为“one”的成员

最佳答案

类变量和常量必须是static,例如,static let one = 1

此处只要两个 let 常量为 static 即可,以便它们可用于初始化类和实例变量。以下对我有用:

class MyClass {
    static let one = 1
    static let two = 2
    static var sum = one + two
    var instanceProduct = one * two
}

MyClass.one
MyClass.sum
MyClass().instanceProduct

请注意,在上面的示例中,您可以执行 MyClass.sum = 5。如果您希望总和也保持不变,只需将其更改为 static let sum = one + two

要求是您在任何函数和闭包之外使用的常量都声明为 static let。这意味着它们对整个类(class)来说都是真正不变的。如果您需要特定于实例的常量,则不能在函数或闭包之外使用它们(正如您所注意到的)——作为变量 sum 的解决方法,我建议使用 lazy 由闭包初始化的变量:

class MyClass {
    let one: Int // value given in `init`
    let two = 2
    lazy var sum: Int = { self.one + self.two }()

    init(one: Int = 1) {
        self.one = one
    }
}
MyClass().sum // 3
MyClass(one: 2).sum // 4

关于ios - 如何访问类常量和变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31352697/

相关文章:

ios - 可以将类型 '__NSArray0' 的值转换为 'CIRectangleFeature'

ios - 播放声音后 childViewController 不释放

iphone - 从 ScrollViewController 内容 View 导航到堆栈上的另一个 View

ios - 在 Swift 中使用 Hello World 程序的“NSInvalidArgumentException”

ios - swift语言如何在SingleTon类中设置NSDictionary

swift - 使用 CoreData 在 SwiftUI 中填充列表

ios - swift 3 : Wrong UIView size read

ios - 是否可以在多个 View 中读取存储在 NSUserDefaults 中的值

ios - 真的需要 bridgeToObjectiveC 吗?

ios - 在 Swift 中, block 中的可选函数会引发错误