在Swift中从非静态方法访问静态变量

5
我知道你不能从静态上下文中访问非静态类变量,但反过来呢?我有以下代码:
class MyClass {

    static var myArr = [String]()

    func getArr() -> [String] {
        return myArr
    }

然而,当我尝试编译这段代码时,出现了错误 MyClass does not have a member named myArr。我以为静态变量对静态和非静态方法都是可见的,所以我不知道我错在哪里。
我使用运行OS X Yosemite系统的Macbook并使用Xcode 6.3。

2
我不知道 Swift 的确切语法,但可以尝试类似这样的代码:return MyClass.myArr。 - Gruntcakes
@SvetlanaSlutstokyovich:把它变成答案,赚取一些快速的分数 - 哎呀,太晚了:( - Martin R
4个回答

6

在Swift3中,dynamicType已被废弃。您可以使用type(of: )来替代。

struct SomeData {
  static let name = "TEST"
}

let data = SomeData()
let name = type(of:data).name
// it will print TEST

5
您需要在变量之前包含类名。
class MyClass {

    static var myArr = [String]()

    func getArr() -> [String] {
        return MyClass.myArr
    }
}

myArrMyChildClass中被重写时,这将是一个问题,getArr()将返回在MyClass中定义的值,而不是在MyChildClass中定义的值。 - Ian Bytchek

2
您还可以使用self.dynamicType:
class MyClass {

    static var myArr = [String]()

    func getArr() -> [String] {
        return self.dynamicType.myArr
    }
}

2
您只需要添加类名即可。
class MyClass {

    static var myArr = [String]()

    func getArr() -> [String] {
        return MyClass.myArr
    }

}

您可以通过两种不同的方式访问您的数组:
MyClass().getArr()

或者

MyClass.myArr

使用self.myArr这种方式也可以吗? - Adrian M
1
只需从类方法中调用,无需显式地使用self。 - agy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接