有没有办法在Swift中的nil合并运算符中不使用强制解包?
我尝试使用:
Int(errorCodeString?) ?? 500
但是,这没效果。
整个代码段是:
var errorCodeString: String?
errorCodeString = "404"
let actualErrorCode = Int(errorCodeString!) ?? 500
print("Actual Error Code: \(actualErrorCode)")
答案 0 :(得分:0)
不确定。使用nil coalescing operator
两次,一次打开String?
,第二次打开Int?
:
let actualErrorCode = Int(errorCodeString ?? "") ?? 500
您的errorCodeString
是可选String
(又名String?
)。执行errorCodeString ?? ""
会解除errorCodeString
nil
,如果""
则将其替换为nil
。
结果传递给Int
初始值设定项,后者为String
。 Int(_:String)
初始值设定项会将String
转换为Int?
,如果nil
不代表有效String
,则Int
包含整数值或??
}。如果值为Int?
,则第二个零合并运算符500
将展开nil
或将其替换为Int(errorCodeString?) ?? 500
。
您最初尝试的内容?
不起作用,因为只有?
的可选项才会在可选链中有条件地将其展开。在这种情况下,您必须使用成员访问权限,方法调用或索引运算符[]
关注<button type="button" id="setc">Set Cookie</button>
。
答案 1 :(得分:0)
Int
初始值设定项不接受可选项。
您的Int(errorCodeString?) ?? 500
在语法上是不正确的。请改用Int(errorCodeString ?? "") ?? 500
。