ios - 静态属性观察者

标签 ios swift properties static

像往常一样,这通常有效:

var someVar = 1{
    didSet{
        callSomeMethod()
    }
}

但是,当我将 var 设置为静态时,我就不能再调用该方法了。

static var someVar = 1{
    didSet{
        callSomeMethod() // -> gives error
    }
}

错误如下所示。静态变量不能有属性观察器吗?如果是这样,还有其他选择吗?有人请帮忙。

enter image description here

最佳答案

初始设置

我想你的意思是这个测试:

class Test {

    var someVar = 1{
        didSet{
            callSomeMethod()
        }
    }

    func callSomeMethod(){
        print("Test")
    }
}

var test = Test()

print(test.someVar)
test.someVar = 2
print(test.someVar)

我得到结果:

1
Test
2

静态变量不能调用实例函数

我添加了一个静态,然后我也需要将函数设置为静态:

class Test {

    static var someVar = 1{
        didSet{
            callSomeMethod()
        }
    }

    //this need to be static too
    static func callSomeMethod(){
        print("Test")
    }

}

var test = Test()

print(Test.someVar)
Test.someVar = 2
print(Test.someVar)

我得到结果:

1
Test
2

创建实例访问实例功能

初始化类以访问函数调用(不推荐):

class Test {

    static var someVar = 1{
        didSet{
            // init the class to get a instance function
            Test().callSomeMethod()
        }
    }

    func callSomeMethod(){
        print("Test")
    }

}

var test = Test()

print(Test.someVar)
Test.someVar = 2
print(Test.someVar)

我得到结果:

1
Test
2

函数外

当函数在外部时,它也可以工作

class Test {

    static var someVar = 1{
        didSet{
            callSomeMethod()
        }
    }

}

//this need to be outside
func callSomeMethod(){
    print("Test")
}

var test = Test()

print(Test.someVar)
Test.someVar = 2
print(Test.someVar)

我得到结果:

1
Test
2

关于ios - 静态属性观察者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41775483/

相关文章:

ios - uisearchcontroller中三个字母后开始搜索

ios - 缺少 NFCTagReaderSession 所需的权利

android - 需要帮助将进程从 Java(android) 转换为 IOS Swift

java - 在属性文件中转义 json 字符串

java - Spring PropertySource 找不到属性

Java - 运行 JAR 拒绝加载同一目录中的文件

ios - 如何使用 Siri 打开/触发 View Controller ?

ios - 如何检测当前方向来旋转 UIImage?

ios - Spritekit removeFromParent() 关于 iOS9 的问题

ios 10 webview xcode swift 地理定位