Swift中的可选链和类型转换的使用案例分解?? ""

63 阅读2分钟
let num1 = Double(readLine() ?? "") ?? 0

这行代码使用了可选链(??)和类型转换(Double())来处理用户的输入。我们来拆分一下:

  1. readLine():这是一个从控制台读取用户输入的函数。用户在控制台输入一行文字并按下回车键后,readLine()会返回一个可选的字符串(String?)。如果用户没有输入任何内容就按了回车,readLine()会返回nil
  2. ?? "":这是可选链操作符。它的作用是,如果readLine()返回的是nil,就使用??后面的默认值代替,这里是一个空字符串""。所以,readLine() ?? ""的结果要么是用户输入的字符串,要么是一个空字符串,但绝不会是nil
  3. Double():这是一个类型转换函数,尝试将一个字符串转换为Double类型的数字。如果字符串内容无法转换为数字(比如包含了非数字字符),Double()会返回nil
  4. ?? 0:这又是一个可选链操作符。如果Double(readLine() ?? "")返回的是nil(即用户输入的内容无法转换为数字),就使用??后面的默认值0代替。

综上所述,这行代码的作用是:

  • 从控制台读取用户输入的一行字符串
  • 如果用户没有输入任何内容,就使用空字符串""代替
  • 尝试将这个字符串转换为Double类型的数字
  • 如果转换失败,就使用0作为默认值

最终,num1会被赋值为一个Double类型的数字,要么是用户输入的数字,要么是0。这样可以确保num1总是一个有效的数字,不会是nil,方便后续的计算操作。

这种处理用户输入的方式在 Swift 中非常常见,利用了可选类型和类型转换的特性,使得代码更加安全和健壮。