Swift 可选的 case where 语句
Swift optional in case where statement
前几天参加一个课程,其中一位服务员尝试了一些东西,结果发现了一个有趣的错误。
当打开值为 nil
的案例时,这如何提供结果?
func canDrink(age: Int?, country: String)->bool{
switch (age, country){
case (let anAge, _) where anAge < 5: //playground still says anAge is an optional
return false
default:
return true
}
}
canDrink(15,"UK") // Returns true
canDrink(4,"UK") // Returns false
canDrink(nil,"UK") // Also returns false not an error.
干杯
更新
根据您的评论提供更多背景信息。与可选的比较没有任何无效:
var d: Int? = 4
if d < 5 {} // true
并且如果可选值是 nil
,它仍然是一个真实值:
var d: Int? = nil
if d < 5 {} // still true
这是为什么?好吧,nil
值字面意思是 .None
(if .None < 5
)(见下文),在这种情况下 5
肯定大于 .None
.
原创
这里的问题是 let anAge
是一个可选的 Int(正如您所指出的)。如果你检查它,你会看到这个(图片供参考):
如果您查看可选定义,您会看到一个选项是一个具有两种类型(None
和 Some
)的枚举。所以我们可以检查 Some
以确保它有一个值:
func canDrink(age: Int?, country: String) -> Bool {
switch (age, country) {
case (.Some, _) where age < 5: // We now know that `age` is some value
return false
default:
return true
}
}
canDrink(15,"UK") // Returns true
canDrink(4,"UK") // Returns false
canDrink(nil,"UK") // Now returns true, since this is a `.None` age
前几天参加一个课程,其中一位服务员尝试了一些东西,结果发现了一个有趣的错误。
当打开值为 nil
的案例时,这如何提供结果?
func canDrink(age: Int?, country: String)->bool{
switch (age, country){
case (let anAge, _) where anAge < 5: //playground still says anAge is an optional
return false
default:
return true
}
}
canDrink(15,"UK") // Returns true
canDrink(4,"UK") // Returns false
canDrink(nil,"UK") // Also returns false not an error.
干杯
更新
根据您的评论提供更多背景信息。与可选的比较没有任何无效:
var d: Int? = 4
if d < 5 {} // true
并且如果可选值是 nil
,它仍然是一个真实值:
var d: Int? = nil
if d < 5 {} // still true
这是为什么?好吧,nil
值字面意思是 .None
(if .None < 5
)(见下文),在这种情况下 5
肯定大于 .None
.
原创
这里的问题是 let anAge
是一个可选的 Int(正如您所指出的)。如果你检查它,你会看到这个(图片供参考):
如果您查看可选定义,您会看到一个选项是一个具有两种类型(None
和 Some
)的枚举。所以我们可以检查 Some
以确保它有一个值:
func canDrink(age: Int?, country: String) -> Bool {
switch (age, country) {
case (.Some, _) where age < 5: // We now know that `age` is some value
return false
default:
return true
}
}
canDrink(15,"UK") // Returns true
canDrink(4,"UK") // Returns false
canDrink(nil,"UK") // Now returns true, since this is a `.None` age