2015-11-13 142 views
1

我一直在Objective-C中實現家庭套件應用程序。我已經轉換所有的SWIFT代碼,但在一行採空叫客觀C代碼相當於後衛

guard let metadata = metadata else { return false } 

可以在任何一個請指導我寫的Objective-C相當於上面的代碼行的代碼。非常感謝您閱讀我的文章。

回答

2

它是:

if (metadata == nil){ 
     return false; 
    } 
+3

您忘記了'return'行後面的分號。如果它是'BOOL'類型,你應該返回'NO',而不是'false'。 – rmaddy

5

從編譯器的角度沒有完全等效,因爲保護聲明else塊保證返回控制(即保護語句必須是真實的代碼繼續過去守衛)。你可以read more about it here

你可以得到最接近的是:

if(metadata == nil) { return NO; } 
1

沒有guard相當於在Objective-C。

最接近的將是做到這一點:

if (metadata == nil) { 
    return NO; 
} 

...但是,存在這樣metadata必須是一個對象類型(即,類)的限制;它不能是結構或C標量(例如,NSUInteger)。

+0

糟糕! 'if'後面忘了'()'。最近做得太多Swift了! –

+0

對於單行,Objective-C中的花括號是可選的。 – rmaddy

+0

我知道。但無論如何,包含它們並沒有什麼壞處。當你添加第二行時,缺少花括號可能會回來並咬你。 –

0

您可以使用 「let」 的定義在Objective-C++,其定義爲:

#define let const auto 

到類的Objective-C的轉換爲目的,僅限於C++有必要改變.M的延伸.mm

//Similar to "guard" in Swift 
let object = myObject; 
if (!object) { 
    return; 
} 

//Other use case 
if (let object = myObject) { 
    //Object is not nil 
    //Do something 
}