if-case 模式匹配 - 条件中的变量绑定需要初始化器

if-case pattern matching - Variable binding in a condition requires an initializer

我正在阅读 Big Nerd Ranch 的 Swift 编程书籍(第 2 版),在关于 Switch 语句的章节中,有一小节介绍 in-case 以及如何使用它们。在描述如何实现具有多个条件的 if-case 时,这是书中显示的代码:

...
let age = 25

if case 18...35 = age, age >= 21 {
    print("In cool demographic and of drinking age")
} 

当我尝试在我的 Xcode playground 中实现这个(完全按照原样)时,我收到一个错误 ("variable binding in a condition requires an initializer")

看来年龄 >= 21 位才是真正的问题,因为这个

let age = 25

if case 18...35 = age{
    // Same thing
}

工作正常。我在多条件代码中做错了什么?

I'm working through Big Nerd Ranch's Swift Programming book (2nd edition) ...

the official book web page 所述,该书包括 Swift 版本 3.0Xcode 8.

可能,您正在 Xcode 7.x 或更早版本,在 Swift 2 中,它应该是:

if case 18...35 = age where age >= 21 {
    print("In cool demographic and of drinking age")
}

Swift 3:

if case 18...35 = age, age >= 21 {
    print("In cool demographic and of drinking age")
}

备注:如果第一个代码片段已经在Xcode8 playground编译,它会报以下编译时错误:

error: expected ',' joining parts of a multi-clause condition

建议将 where 更改为 ,

使用可选绑定时应用的相同语法 - 例如 -

Swift 2:

if let unwrappedString = optionalString where unwrappedString == "My String" {
    print(unwrappedString)
}

Swift 3:

if let unwrappedString = optionalString, unwrappedString == "My String" {
    print(unwrappedString)
}

有关将 where 更改为 , 的更多信息,您可能需要查看 Restructuring Condition Clauses Proposal

所以,确保将使用的IDE更新到最新版本(编译Swift 3)。