簡體   English   中英

Swift類添加“ @objc”的原因

[英]Swift class add “@objc” for why

這是Swift教程的鏈接

我讀了協議部分,我知道協議是否用@objc標記:

@objc protocol CounterDataSource {
    optional func incrementForCount(count: Int) -> Int
    optional var fixedIncrement: Int { get }
}

這意味着該協議是為了指定可選要求,並且只能由類采用

但是教程沒有說為什么類也需要用@objc標記?

@objc class Counter {
    var count = 0
    var dataSource: CounterDataSource?
    func increment() {
      if let amount = dataSource?.incrementForCount?(count) {
        count += amount
      } else if let amount = dataSource?.fixedIncrement? {
        count += amount
      }
    }
}

如果我從類中刪除@objc,編譯器也不會顯示錯誤消息

那么是否將@objc添加到類之間有什么不同?

棄用

在最新的Swift發行版中不再可以使用@objc w / o NSObject因此不贊成使用此答案。

原版的

@objc是類的前綴,以允許它們在ObjC中使用。 如果您僅使用Swift進行交易,則沒有必要。

同樣,如果您的類繼承自ObjC類,則前綴是不必要的。

例如, #selector由Obj-c擁有,

在迅速的,我們將使用#selector.addTarget.target對象。 在那里,我們應該在@objc之前添加定位方法。

例:

@objc func dummy(_ sender: UIButton) {
    print("xxx")
}

上面的方法將在UIButton的目標中使用

dummyButton.addTarget(self, action: #selector(self. dummy(_:)), for: .touchUpInside)

這就是為什么我們在@objc中使用@objc作為前綴。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM