@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 的方法
- performOperation是 Swift 普通的簡單裝飾方式。
- performOcOperation具有
@objc
,這意味著它應該對 Objective-C 運行時可見。 當編譯器在名稱中看到字符串“ Objc”時,便進行了一些額外的名稱轉換。 - performDynamicOperation 選擇動態分配。該方法還將在 Objective-C 中可見。
小結論
@objc
使 swift代碼 在 Objective-C 可見。需要用它來設置按鈕和手勢識別器上的 target/action。dynamic
選擇加入 動態調度。您可能需要此功能來獲得 KVO 的支持,或者正在進行方法的修改。- 當前唯一的動態分配方法是通過Objective-C runtime ,因此如果要使用 dynamic ,必須add
@objc
。