轉載:swift3.0和Objective-C的互動需要注意這些
章,作者:ZeroJ(Gitbub)
Swift3.0出來後, 可以看到改變很大, 和cocoa, Foundation...的互動也變得更方便了, 同時Swift編寫的應用適配到iOS 7, 所以, 我們可以相信: 在未來使用swift的情況會逐漸增加了, 同時會涉及到OC和Swift在項目中並存的情況, 這裡我重新讀了官方的'Using swift with Cocoa and Objective-C(swift3)'的文檔, 記錄了一些個人覺得比較常用的筆記, 請大家選擇性閱讀(裡面的代碼 均來自文檔)
OC的初始化方法在Swift中被引為
1 2 3 |
init(...) --- 如果初始化不會失敗 init?(...) --- 如果初始化可能失敗 init!(...) --- 否則 |
oc中的property裡的(getter==, setter==)將會被swift忽略
id對應Anyobject 但是所有的Anyobject在swift中是可選值, 如果之前的值為可選值, 在被設定為Anyobject後就是多重可選值了
oc中的屬性被標記為
1 2 3 |
nullable -> 在swift中相當於 ? nonnull -> 在swift中相當於 非可選屬性 未標記 -> 在swift中相當於 ! |
oc中的輕量級泛型也是對應與swift中的泛型
1 2 |
@property NSArray *dates 對應於 var dates: [Date] |
swift 中的閉包預設捕獲變數的方式相當於 oc中block中捕獲被標記為 __block的變數方式 -> 就是說 閉包捕獲到的是變數的指標
swift中只要不是在多線程中, 建議使用[unowned self]來避免循環參考, 多線程中, 建議使用[weak self]
== 操作符相當於oc中的isEqual: --- 即比較內容是否相等;=== 相當於oc中的指標比較
繼承自NSObject的子類如果重寫了isEquals:方法, 應當提供 hash 這個屬性
不能在oc中繼承swift的class