首页 > 解决方案 > 不了解目标、#selector() 和 @objc 是如何在此代码中被错误使用的

问题描述

有人可以向我解释为什么这不起作用

class MyClass{
@objc func doSomething(){
        print("I did something");
    }
}
let timer = Timer.scheduledTimer(timeInterval: 1.0, target: MyClass, selector: #selector(doSomething), userInfo: nil, repeats: true)

- - 编辑 - - - -

发现这可以代替

let timer = Timer.scheduledTimer(timeInterval: 1.0, target: MyClass(), selector: #selector(MyClass.doSomething), userInfo: nil, repeats: false)

有人可以解释为什么目标需要是 MyClass() 而不是 MyClass 以及为什么它需要是 MyClass.doSomething 而不是 doSomething。因为我认为目标成为选择器的范围

标签: swift

解决方案


正确的代码

    var timer : Timer?
    
    func timerstarter(){
        timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(doSomething), userInfo: nil, repeats: true)
    }
    
    
    @objc func doSomething(){
        print("I did something");
    }

推荐阅读