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

@property (nonatomic, copy) NSString *foo;

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

var foo: String!

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

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

@property (nonatomic, copy) NSString *foo;

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

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

func init() {
  objectiveCObject.secretFunc()

}func calcLen() -> Int {  

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式