如何在swift中访问类外的常量?

时间:2015-03-04 21:03:05

标签: class swift scope

class myClass {
    let x = 0
}

如何访问x以外的myClass常量?

2 个答案:

答案 0 :(得分:4)

x未定义为常量,而是作为可变实例属性。为了使它不可变(技术上与常量不同,但结果不会改变),你必须使用let

那就是说,如果它是一个实例属性,你需要一个类实例,因为该属性是作为类实例化的一部分创建的:

let instance = MyClass()
instance.x

如果你想使它成为一个静态属性,可以使用类型而不是实例来访问,你应该将它声明为静态:

class MyClass {
    static let x = 0
}

但静态存储属性仅适用于swift 1.2。

对于以前的版本,您可以使用计算属性:

    class var x: Int { return 0 }

或将类转换为结构:

struct MyClass {
    static let x = 0
}

另一种解决方案是使用嵌套结构:

class MyClass {
    struct Static{
        static let x = 0
    }
}

MyClass.Static.x

答案 1 :(得分:1)

您可以将其声明为静态var,如下所示:

class MyClass {
   static var x = 0
}

然后您可以使用MyClass.x在课外访问它。如果你声明它" class var",它会给你错误信息"类中尚未支持的类存储属性;你是说静态'?",所以他们以后可能会成为这种语言的一部分。此时,您应该为类创建计算属性:

class MyClass {
   static var x: Int {
       return 3
   } 
} // This actually makes no sense to be a computed property though

您可以在https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html

找到有关类型属性的信息