if 条件判断语句问题

书上是这么说的:
“在if语句中,条件必须是一个布尔表达式——这意味着像if score { ... }这样的代码将报错,而不会隐形地与 0 做对比。
你可以一起使用if和let来处理值缺失的情况。这些值可由可选值来代表。一个可选的值是一个具体的值或者是nil以表示值缺失。在类型后面加一个问号来标记这个变量的值是可选的。”

“var optionalString: String? = "Hello"
print(optionalString == nil)
 
var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
    greeting = "Hello, \(name)"
}”

对于if let name = optionalName 感觉不是布尔判断,该怎么理解这句

阅读 9k
3 个回答

不会swift
说一点你自己测试一下

let name = optionalName
这个语句,先是声明,然后赋值。
通常情况下,赋值并非一定成功的,所以也就存在了bool的结果。
那么,你可以测试一下optionalName为何值时赋值不成功。

参考
using-if-let-with-many-expressions

if let name = optionalName

你这样念:判断optionalName『包含值』的状态是true还是false?true话把值取出来放到name里。

Optional Binding
可选绑定
使用可选绑定(optional binding)来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变 量。可选绑定可以用在 if 和 while 语句中,这条语句不仅可以用来判断可选类型中是否有值,同时可以将 可选类型中的值赋给一个常量或者变量。if 和 while 语句,请参考控制流。
像下面这样在 if 语句中写一个可选绑定:

if let constantName = someOptional {
    statements
}

你可以像上面这样使用可选绑定来重写 possibleNumber 这个例子 (页 0):

if let actualNumber = Int(possibleNumber) {
    print("\'\(possibleNumber)\' has an integer value of \(actualNumber)")
} else {
    print("\'\(possibleNumber)\' could not be converted to an integer")
}
// 输出 "'123' has an integer value of 123"

这段代码可以被理解为:
“如果 Int(possibleNumber) 返回的可选 Int 包含一个值,创建一个叫做 actualNumber 的新常量并将可选 包含的值赋给它。”
如果转换成功, actualNumber 常量可以在 if 语句的第一个分支中使用。它已经被可选类型 包含的 值初始化 过,所以不需要再使用 ! 后缀来获取它的值。在这个例子中,actualNumber 只被用来输出转换结果。
你可以在可选绑定中使用常量和变量。如果你想在if语句的第一个分支中操作 actualNumber 的值,你可以改 成 if var actualNumber ,这样可选类型包含的值就会被赋给一个变量而非常量。
你可以包含多个可选绑定或多个布尔条件在一个 if 语句中,只要使用逗号分开就行。如果所有可选绑定的值为 nil 或者所有布尔条件语句都为 false ,这样整个 if 条件判断都是为 false ,这时你就需要使用嵌套 if 条件语句来处理,如下所示:

if let firstNumber = Int("4"), let secondNumber = Int("42"), firstNumber < secondNumber && secondNumber <
    print("\(firstNumber) < \(secondNumber) < 100")
}
// Prints "4 < 42 < 100"
if let firstNumber = Int("4") {
    if let secondNumber = Int("42") {
        if firstNumber < secondNumber && secondNumber < 100 {
            print("\(firstNumber) < \(secondNumber) < 100")
} }
}
// Prints "4 < 42 < 100"

从官方文档拷贝来的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进