客观C代码相当于后卫

问题描述:

我一直在Objective-C中实现家庭套件应用程序。我已经转换所有的SWIFT代码,但在一行采空叫客观C代码相当于后卫

guard let metadata = metadata else { return false } 

可以在任何一个请指导我写的Objective-C相当于上面的代码行的代码。非常感谢您阅读我的文章。

它是:

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

您忘记了'return'行后面的分号。如果它是'BOOL'类型,你应该返回'NO',而不是'false'。 – rmaddy

从编译器的角度没有完全等效,因为保护声明else块保证返回控制(即保护语句必须是真实的代码继续过去守卫)。你可以read more about it here

你可以得到最接近的是:

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

没有guard相当于在Objective-C。

最接近的将是做到这一点:

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

...但是,存在这样metadata必须是一个对象类型(即,类)的限制;它不能是结构或C标量(例如,NSUInteger)。

+0

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

+0

对于单行,Objective-C中的花括号是可选的。 – rmaddy

+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 
}