if-case模式匹配 - 在条件中进行变量绑定需要初始化值。

3

我正在学习Big Nerd Ranch的Swift编程书(第二版),在Switch语句的章节中,有一小节关于in-cases以及如何使用它们。在描述如何使用多个条件来实现if-cases时,书中展示了以下代码:

...
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")。

看起来是 age >= 21 这部分引起了实际的问题。

let age = 25

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

工作得很好。在多条件代码中我做错了什么?

1
你有没有使用Swift 2?(如果是,为什么?)在Swift 3.1中对我来说编译得很好。 - Hamish
正如@Hamish所提到的,这里也可以编译通过...你使用的Swift版本是什么? - Ahmad F
Swift 2.2确实会给出该错误消息。Swift 2语法应为if case 18...35 = age where age >= 21 { - vacawama
来自“必要的硬件和软件”章节的引用:“本书是针对Swift 3.0和Xcode 8.0编写的。许多示例在旧版本的Xcode中无法工作。” - vacawama
但是你真的应该升级到Swift 3 - 最新版本的Xcode甚至不支持Swift 2。 - Hamish
1个回答

4
我正在学习《大牛津的Swift编程》(第2版)…… 如官网介绍,该书包含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")
}
备注:如果第一个代码片段在Xcode 8的playground中已经编译,它将抱怨以下编译错误:

错误:预期“,”连接多条子句条件

建议将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)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接