我一直在Objective-C中實現家庭套件應用程序。我已經轉換所有的SWIFT代碼,但在一行採空叫客觀C代碼相當於後衛
guard let metadata = metadata else { return false }
可以在任何一個請指導我寫的Objective-C相當於上面的代碼行的代碼。非常感謝您閱讀我的文章。
我一直在Objective-C中實現家庭套件應用程序。我已經轉換所有的SWIFT代碼,但在一行採空叫客觀C代碼相當於後衛
guard let metadata = metadata else { return false }
可以在任何一個請指導我寫的Objective-C相當於上面的代碼行的代碼。非常感謝您閱讀我的文章。
它是:
if (metadata == nil){
return false;
}
從編譯器的角度沒有完全等效,因爲保護聲明else塊保證返回控制(即保護語句必須是真實的代碼繼續過去守衛)。你可以read more about it here。
你可以得到最接近的是:
if(metadata == nil) { return NO; }
沒有guard
相當於在Objective-C。
最接近的將是做到這一點:
if (metadata == nil) {
return NO;
}
...但是,存在這樣metadata
必須是一個對象類型(即,類)的限制;它不能是結構或C標量(例如,NSUInteger
)。
糟糕! 'if'後面忘了'()'。最近做得太多Swift了! –
對於單行,Objective-C中的花括號是可選的。 – rmaddy
我知道。但無論如何,包含它們並沒有什麼壞處。當你添加第二行時,缺少花括號可能會回來並咬你。 –
您可以使用 「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
}
您忘記了'return'行後面的分號。如果它是'BOOL'類型,你應該返回'NO',而不是'false'。 – rmaddy