swift3.0與OC的互動注意事項

weixin_34357887發表於2016-11-04

http://www.cocoachina.com/ios/20160620/16769.html

1.id對應Anyobject 但是所有的Anyobject在swift中是可選值, 如果之前的值為可選值, 在被設定為Anyobject後就是多重可選值了

2.swift 中的閉包預設捕獲變數的方式相當於 oc中block中捕獲被標記為 __block的變數方式 -> 就是說 閉包捕獲到的是變數的指標

3.swift中只要不是在多執行緒中, 建議使用[unowned self]來避免迴圈引用, 多執行緒中, 建議使用[weak self]

4.== 操作符相當於oc中的isEqual: --- 即比較內容是否相等;=== 相當於oc中的指標比較

5.繼承自NSObject的子類如果重寫了isEquals:方法, 應當提供 hash 這個屬性

6.如果在swift中遇到oc中不支援的命名 可以利用 @objc(name)為他(屬性 列舉, 方法名...)名個別名     eg.

// MARK:- 事件監聽

extensionMainViewController{

    // 事件的監聽本質傳送訊息,但是傳送訊息是OC的特性

    @objcfileprivatefunccomposeBtnClick() {

         print("composeBtnClick")

    }

}

7.dynamic 將屬性或者方法標記為dynamic就是告訴編譯器把它當作oc裡的屬性或方法來使用(runtime),當需要使用 KVO 或者 runtime的時候需要這樣處理

8.當使用oc的 perform(selector, with:)方法的時候會返回一個可選值(指向AnyObject的指標);但是使用perform(:on:with:waitUntilDone:modes:) and perform(:with:afterDelay:)不會返回可選值

9.使用 #keyPath() 可以轉換為string, #keyPath(class.property) == "property",可用於KVC 例如person.value(forKey: #keyPath(Person.name)) = person.name,

10.@IBDesignable 用在class(UIView的子類)宣告的前面, 然後就可以在storyBoard中的inspector編輯它;@IBInspectable 用在(UIView的子類)的屬性前面, 然後就可以在storyBoard中的inspector編輯它 ,就想系統提供的可以設定顏色,字型...

11.oc中的 copy屬性 轉換為swift中的@NSCopying 必須遵守NSCoding協議

相關文章