不知道大家有沒有發(fā)現(xiàn),在一個 Objective-C 和 Swift 混編的 App 中,當(dāng)把一個 OC 中的參數(shù)轉(zhuǎn)到 Swift 時,Swift 會自動把這個變量進(jìn)行強(qiáng)制解包。舉個例子,我在 OC 中定義這樣一個變量:

@property (nonatomic, copy) NSString *foo;

它轉(zhuǎn)成 Swift 就變成了這樣:

var foo: String!

這樣看上去合情合理。Swift 中有 String? 和 String! 兩種形式,但 OC 中沒有 NSString? 和 NSString! ,當(dāng) Swift 無法區(qū)分 OC 中的變量是不是 nil 的時候,一律強(qiáng)行轉(zhuǎn)化為非空參數(shù)。這樣設(shè)計體現(xiàn)了 Swift 強(qiáng)安全性語言的特性。

但是這時候問題來了。我們回到上文中的例子,假如 OC 中對 foo的使用如下:

@property (nonatomic, copy) NSString *foo;

- (void)secretFunc {  
 // 一些詭異復(fù)雜的操作  ...  
 self.foo = nil; }

然后我們在 Swift 中這樣調(diào)用:

func init() {
  objectiveCObject.secretFunc()

}func calcLen() -> Int {  

網(wǎng)友評論