@objc 與 dynamic 筆記

Tom Tung
May 21, 2021

--

  • @objc 意思是想讓 Swift code(class, method, property, etc) 在 Objective-C 中可見。
  • dynamic 意味著要使用 Objective-C動態調度

在 Swift 3 或 更早的版本,dynamic也含有@objc。在 Swift 4 中,dynamic 僅意味著 dynamic dispatch(動態調度) 且對 Objective-C 的可見性(@objc)無關。

但是,沒有像是 Swift 動態調度之類的東西。只有Objective-C runtime’s dynamic dispatch(動態調度),這意味著不能只使用 dynamic,而必須編寫@objc dynamic。(才能被 OC 看見)

三種裝飾 func 的方法

  1. performOperation是 Swift 普通的簡單裝飾方式。
  2. performOcOperation具有@objc,這意味著它應該對 Objective-C 運行時可見。 當編譯器在名稱中看到字符串“ Objc”時,便進行了一些額外的名稱轉換。
  3. performDynamicOperation 選擇動態分配。該方法還將在 Objective-C 中可見。

小結論

  • @objc 使 swift代碼 在 Objective-C 可見。需要用它來設置按鈕和手勢識別器上的 target/action。
  • dynamic 選擇加入 動態調度。您可能需要此功能來獲得 KVO 的支持,或者正在進行方法的修改。
  • 當前唯一的動態分配方法是通過Objective-C runtime ,因此如果要使用 dynamic ,必須add @objc

--

--

Tom Tung

Hi, I’m Tom. I work as an iOS developer.