使用选择器调用带参数

时间:2018-01-04 19:35:19

标签: swift timer

我的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函数?

1 个答案:

答案 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
    }
}