为什么我必须使用@objc在Swift中创建一个函数?

时间:2018-08-02 09:46:24

标签: ios swift

我是一名开发新手,目前正在学习Swift4。我正在编写Egg计时器应用程序,感到困惑。我创建了一个减少scheduledTimer内时间的函数。但是,在我使用@objc创建decreaseTimer()函数之前,它不允许我编译和构建。

这是为什么?我很困惑,哈哈。我的代码正常工作,但只想知道如何做?

这是我的代码:

import UIKit

class ViewController: UIViewController {

var timer = Timer()

var time = 210

@objc func decreaseTimer() {

    if time > 0 {

    time -= 1

    timerLabel.text = String(time)
    } else {

        timer.invalidate()
    }

}


@IBOutlet weak var timerLabel: UILabel!

@IBAction func play(_ sender: Any) {

    timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.decreaseTimer), userInfo: nil, repeats: true)

}

任何建议将不胜感激。谢谢

1 个答案:

答案 0 :(得分:3)

selector本质上是在target对象上动态搜索的函数的名称。问题在于,Swift没有提供任何反射API来按名称搜索方法,然后进行动态调用,而这只能在Objective-C中完成。因此,您必须使该方法可从Objective-C访问。