Swift 如果案例模式匹配-条件中的变量绑定需要初始值设定项

Swift 如果案例模式匹配-条件中的变量绑定需要初始值设定项,swift,pattern-matching,if-case,Swift,Pattern Matching,If Case,我正在阅读Big Nerd Ranch的Swift编程书(第二版),在关于Switch语句的章节中,有一小部分介绍了in cases以及如何使用它们。在描述如何实现具有多个条件的if情况时,本书给出了以下代码: ... let age = 25 if case 18...35 = age, age >= 21 { print("In cool demographic and of drinking age") } 然而,当我尝试在Xcode游乐场中实现它时(实际上是这样),我

我正在阅读Big Nerd Ranch的Swift编程书(第二版),在关于Switch语句的章节中,有一小部分介绍了in cases以及如何使用它们。在描述如何实现具有多个条件的if情况时,本书给出了以下代码:

...
let age = 25

if case 18...35 = age, age >= 21 {
    print("In cool demographic and of drinking age")
} 
然而,当我尝试在Xcode游乐场中实现它时(实际上是这样),我得到了一个错误(“条件中的变量绑定需要初始值设定项”)

似乎年龄>=21位是实际问题,如下所示

let age = 25

if case 18...35 = age{
    // Same thing
}
很好。在多重条件代码中我做错了什么

我正在阅读《大书呆子牧场》的《快速编程书》(第二册) 版本)

如中所述,本书包括带有Xcode 8的Swift版本3.0

您可能正在使用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")
}
if let unwrappedString = optionalString, unwrappedString == "My String" {
    print(unwrappedString)
}
备注:如果第一个代码段是在Xcode 8上编译的,它将抱怨以下编译时错误:

错误:多子句条件的各部分应为“”

建议将
where
更改为

例如,在使用可选绑定时应用相同的语法:

Swift 2:

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

if case 18...35 = age, age >= 21 {
    print("In cool demographic and of drinking age")
}
if let unwrappedString = optionalString, unwrappedString == "My String" {
    print(unwrappedString)
}
有关将
where
更改为
的详细信息,请查看


因此请确保将使用的IDE更新为最新版本(该版本可编译Swift 3)。

您是否碰巧使用了Swift 2?(如果是这样,为什么?)在Swift 3.1As@Hamish中为我编译了fine,这里它也符合fine。。。您使用的Swift版本是什么?Swift 2.2确实给出了错误信息。如果案例18…35=年龄,则Swift 2语法将为
,其中年龄>=21{
。引用标题为“必要的硬件和软件:本书是为Swift 3.0和Xcode 8.0编写的。许多示例不适用于旧版本的Xcode。但实际上,您应该升级到Swift 3–最新版本的Xcode甚至不支持Swift 2。