试图避免找到nil展开可选值

时间:2017-09-28 17:04:30

标签: ios swift

我正在尝试用UITextFields提供的用户输入数字进行数学计算。问题是,TextField中可能没有任何内容,在这种情况下,该值应设置为零。我尝试了守卫声明,但似乎我用错了方法:

    guard let number = numberTextField.text else{ let number = 0}

这段代码有什么问题?我应该改变什么?

3 个答案:

答案 0 :(得分:4)

无法使用guard语句,因为如果条件为false,则需要您退出该函数。相反,您应该使用??运算符:

let number = numberTextField.text.flatMap { Int($0) } ?? 0

为什么flatMap?因为我们需要将String转换为Int(或Double,如果这可能包含浮点值),以使其与{{0相同1}}。如果flatMap不是text,则可选项上的nil会返回闭包内的值,但如果匹配则返回nil。在任何一种情况下,您最终都会选择Int,然后通过0运算符提供默认值??,使其成为非可选项。

答案 1 :(得分:0)

您希望使用默认值而不是警卫来获取您想要的行为。

let number = Double(numberTextField.text) ?? 0

答案 2 :(得分:-1)

没有什么意思是空字符串而不是零 “guard let”用于检查nil值

试试下面的方法

if numberTextField.text.isEmpty {
   let number = 0
}