使用默认值处理可能的nil赋值的更好方法是什么?

Ric*_*cky 2 swift

我在Objective-C中有这个代码:

CGFloat constant = self.leftConstraint.constant;
Run Code Online (Sandbox Code Playgroud)

我想在Swift中实现同样的功能,但这是我能够使它工作的唯一方法(leftConstraint是一个可选变量):

var leftConstraintConstant : CGFloat = 0.0
if self.leftConstraint {
    leftConstraintConstant = self.leftConstraint!.constant
}
Run Code Online (Sandbox Code Playgroud)

在Swift中有没有办法在一条线上做到这一点?

jtb*_*des 9

您的原始代码有效,因为在Obj-C中,发送到nil的消息将返回0.

Swift不允许使用nil消息传递.相反,您可以使用可选链接和nil-coalescing运算符:

let leftConstraintConstant: CGFloat = self.leftConstraint?.constant ?? 0
Run Code Online (Sandbox Code Playgroud)

这更好,因为您明确知道代码应该做什么:传播nil值,默认为0.