iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 16
0
Mobile Development

30 天從 Swift 學會 Objective-C系列 第 16

[16] 30 天從 Swift 學會 Objective-C:Objective-C 物件的 Optional chaining

  • 分享至 

  • xImage
  •  

在現實生活中,我們可以用是否來判斷真理,甚至可以用有沒有判斷事物的存在,並更進一步的查看已存在的事物。

Photo @beccatapert by on Unsplash

Swift 的 Optional

在 Swift 中,有 enum Optional 作為可有可無的抽象概念

// Swift
/* Swift.Optional */

enum Optional<Wrapped> {

    /// The absence of a value.
    case none

    /// The presence of a value, stored as `Wrapped`.
    case some(Wrapped)
    }

關於 Swift 的 Optional chaining 請參考: Optional Chaining - Swift.org

Objective-C 的 Optional

Objective-C 有所謂的 nil、Nil、NULL,如果不了解的話,請先閱讀由 zonble 撰寫的 NULL、nil、Nil… · KKBOX iOS_Mac OS X 基本開發教材

Objective-C 空訊息

之間我們有提到,Objective-C 是使用訊息傳遞的方式,作為物件 Method 的呼叫。

// Objective-C
[[[NSObject alloc] init] description];

我們使用的 3 個 method 呼叫,分別為:

  1. NSObject static member: alloc
  2. NSObject object member: init
  3. NSObject object member: description

然而我們知道,alloc 是有可能在記憶體不夠的時候,回傳 NULL 的,當這個情形發生的時候,而接下來的程式碼(init, description)會直接忽略。

而為了避免程式碼直接被忽略,我們可以在使用之前判斷 object 是不是真的存在:

// Objective-C
NSObject* object = [NSObjct alloc];
if (object) object = [object init];
else NSLog(@"object fail alloc");
if (object) [object description];
else NSLog(@"object fail init");

檢查物件是否存在有另一個效能考量,詳細請參考 Objective-C: Why check nil before respondsToSelector:?

簡單測驗

  1. 如果你要向程式新手解釋 Optional chaining,你會如何解釋

上一篇
[15] 30 天從 Swift 學會 Objective-C:Objective-C 物件的泛型 Generic
下一篇
[17] 30 天從 Swift 學會 Objective-C:Objective-C 物件的 Protocol 與 type casting
系列文
30 天從 Swift 學會 Objective-C30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言