在swift类的静态函数中访问非静态常量

时间:2015-09-02 06:57:56

标签: ios xcode6 swift2

我是swift的新手。我想在静态函数中使用swift类的静态成员以下是我的代码。我无法在静态函数中访问类的静态成员。有没有办法在swift函数中访问非静态成员?

public class Test{
private let testString:String

init(test:String){
     testString = test
}

static func Get(url:String){
 //Here testString is not accessable..
}
}

2 个答案:

答案 0 :(得分:4)

不,没有办法在静态函数中访问非静态变量。你可以创建一个类的静态实例(一个单例的方式)并访问它的testString变量。

答案 1 :(得分:0)

有两种方法可以达到这种效果。如@Alexander所述,您可以创建类的静态实例(如单例)并使用它。 您可以做的另一种方法是像我最近做的一样简单的技巧,您可以拥有变量的静态版本。我所做的是使用信号来监听实例变量将经历的更改。如果尚未覆盖变量的getter(与KVO兼容),或者每次更改实例变量时都只是设置静态变量,则可以使用KVO进行相同操作,尽管必须基于闭包(OBJC中的Block)进行操作,否则这是一个整体比从未见过的大圈子。 每当实例变量的值更改时,您只需将相同的更改应用于静态变量,而在静态函数中需要时,只需使用静态变量即可。

如果您不习惯使用KVO或做出反应,还可以执行其他操作。您可以覆盖实例变量的getter和setter并将它们都设置为file或UserDefaults,还可以创建一个静态方法并覆盖getter以使用与实例变量相同的键读取文件,因此您不必设置每次发生变化时都会使用静态变量。