我的Swift代码如下所示:
class SystemClass {
public init() {}
func setXYZ(xyz: Float32) {
// do something
}
}
let callME: class = class()
class class {
public init() {}
func functionXYZ() {
Timer.scheduledTimer(timeInterval: 0.5, target: self, selector: #selector(SystemClass().setXYZ(xyz: 1.0)), userInfo: nil, repeats: true) // error code
}
}
callME.functionXYZ()
我想致电' functionXYZ
'这已经正常工作但调用setXYZ
函数会导致错误,因为选择器失败了。
如何编辑选择器:
#selector(SystemClass().setXYZ(xyz: 1.0))
使用给定参数调用setXYZ
函数?
答案 0 :(得分:0)
编辑:更新以包含iOS 10.0以前的解决方案
在这种情况下,最好使用带有块的scheduledTimer
函数,因为这样可以将参数传递给函数:
Timer.scheduledTimer(withTimeInterval: 0.5, repeats: true) { (timer) in
SystemClass().setXYZ(xyz: 1.0)
}
适用于iOS 10.0之前版本:
您还可以传入userInfo,包括此默认值,然后从选择器内部访问该信息,如下所示:
Timer.scheduledTimer(timeInterval: 0.5, target: self, selector: #selector(SystemClass().setXYZ(_:)), userInfo: 1.0, repeats: true)
要执行此操作,您还必须修改setXYZ
函数签名,如下所示:
@objc func setXYZ(_ sender: Timer) {
if let xyz = sender.userInfo as? Float {
print(xyz)
// do something
}
}