我在 Swift 中遇到 Nil Coalescing 问题

I am facing issue with Nil Coalescing in Swift

有没有办法在 Swift 中的 nil 合并运算符中不使用强制展开?

我尝试使用:

Int(errorCodeString?) ?? 500

但是,这没有用。

整体代码片段为:

var errorCodeString: String?

errorCodeString = "404"

let actualErrorCode = Int(errorCodeString!) ?? 500

print("Actual Error Code: \(actualErrorCode)")

当然可以。使用 nil coalescing operator 两次,一次打开 String? ,第二次打开 Int?:

let actualErrorCode = Int(errorCodeString ?? "") ?? 500

解释:

您的 errorCodeString 是可选的 String(又名 String?)。执行 errorCodeString ?? "" 将展开 errorCodeString(如果它不是 nil)或将其替换为 ""(如果它是 nil)。

其结果被传递给 Int 初始化程序,后者采用 StringInt(_:String) 初始值设定项将 String 转换为包含整数值的 Int?nil 如果 String 不代表有效的 Int.如果值为 nil.

,则第二个 nil 合并运算符 ?? 解包 Int? 或将其替换为 500

您最初尝试的方法 Int(errorCodeString?) ?? 500 不起作用,因为在带有 ? 的可选项之后仅有条件地在 可选链 中解包它。在这种情况下,您必须在 ? 后跟成员访问、方法调用或索引运算符 [].

Int 初始化器不接受可选值。

您的 Int(errorCodeString?) ?? 500 在句法上不正确。请改用 Int(errorCodeString ?? "") ?? 500