Rob*_*Rob 5 ios performselector swift
我正在尝试运行此代码,但它产生了意想不到的结果。
class Test: NSObject {
@objc var property: Int = 0
}
var t = Test()
t.perform(#selector(setter: Test.property), with: 100)
print(t.property)
Run Code Online (Sandbox Code Playgroud)
正在打印的值是一些垃圾数字-5764607523034233277。如何使用 perform 方法设置属性的值?
该performSelector:withObject:方法需要一个对象参数,因此 Swift 将原始值 100 转换为对象引用。
该setProperty:方法(即#selector(setter: Test.property)计算结果)采用一个原始NSInteger参数。因此它将对象引用视为整数。
由于这种不匹配,您无法以有意义的方式调用setProperty:using 。performSelector:withObject:
但是,您可以使用setValue:forKey:and a#keyPath代替,因为键值编码知道如何将对象转换为基元:
t.setValue(100, forKey: #keyPath(Test.property))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2210 次 |
| 最近记录: |