这里每天分享一个 iOS 的新知识,快来关注我吧
前言
之前的文章中有介绍过,swift 中的可选类型本质其实是个枚举,可以用 switch 语句来匹配,感兴趣可以去看下:
今天介绍一个你可能不知道的小技巧。
可选类型的匹配
首先看一下 Swift 中的可选类型 Optional
的定义:
java
public enum Optional<Wrapped> {
case none
case some(Wrapped)
}
其实就是有两个 case
的枚举类型,一个是 none
,一个是 .some(Wrapped)
,那么就可以使用 switch
语句来匹配了,举个例子:
swift
let number: Int? = 20
switch number {
case .none:
print("nil")
case .some(let value):
print(value)
}
// 打印结果:20
有关联类型时,我想大家都知道使用 case .some(let value)
这种匹配方式,其实这行代码有个更简洁的语法 ,case let value?
,也就是说,上边的代码可以替换为:
swift
let number: Int? = 20
switch number {
case .none:
print("nil")
case let value?:
print(value)
}
// 打印结果:20
把 case .some(let value)
换成 case let value?
以后是不是感觉代码更简洁了。
其他场景
如果你没觉得代码简洁多少,可以看一下下面这个场景,switch 多个可选类型:
swift
let number: Int? = 10
let number1: Int? = 20
let number2: Int? = 30
switch (number, number1, number2) {
case (.none, .none, .none):
print("nil")
case let (value?, value1?, value2?):
print(value, value1, value2)
default:
break
}
// 打印结果:10 20 30
原来的写法是
bash
case (.some(let value), .some(let value1), .some(let value2))
现在的写法:
bash
case let (value?, value1?, value2?):
用在 if 语句中
这种方式也可以用在 if 判断中:
swift
let number: Int? = 10
if case let value? = number {
print(value)
}
// 打印结果 10
用在 for 循环中:
这种方式也可以用在 for 循环中:
swift
let numbers: [Int?] = [1, 2, nil, 4, nil]
for case let number? in numbers {
print("有值 \(number)")
}
// 打印结果
// 有值 1
// 有值 2
// 有值 4
希望今天分享的小技巧能够帮到你。
这里每天分享一个 iOS 的新知识,快来关注我吧
本文同步自微信公众号 "iOS新知",每天准时分享一个新知识,这里只是同步,想要及时学到就来关注我吧!