如果有過OC的開發經驗,那一定會對OC中@dynamic關鍵字比較熟悉,它告訴編譯器不要為屬性合成getter和setter方法。
Swift中也有dynamic關鍵字,它可以用於修飾變數或函式,它的意思也與OC完全不同。它告訴編譯器使用動態分發而不是靜態分發。OC區別於其他語言的一個特點在於它的動態性,任何方法呼叫實際上都是訊息分發,而Swift則儘可能做到靜態分發。
因此,標記為dynamic的變數/函式會隱式的加上@objc關鍵字,它會使用OC的runtime機制。
雖然靜態分發在效率上可能更好,不過一些app分析統計的庫需要依賴動態分發的特性,動態的新增一些統計程式碼,這一點在Swift的靜態分發機制下很難完成。這種情況下,雖然使用dynamic關鍵字會犧牲因為使用靜態分發而獲得的一些效能優化,但也依然是值得的。
參考:阿里雲