Swift中的模式分类
Swift有下面這些模式:
通配符模式(Wildcard Pattern)、標識符模式(Identifier Pattern)、值綁定模式(Value-Binding Pattern)、元組模式(Tuple Pattern)
、枚舉用例模式(Enumeration Case Pattern)、可選項模式(Optional Pattern)、類型轉換模式(Type-Casing Pattern)、表達式模式(Expression Pattern)
簡單的介紹一些這些模式吧
!!!!!!!!!!!! !
通配符模式:由一個下劃線構成 (?_ ),用于匹配并忽略調任何值。
舉例:
for _ in 1...3 {
? ? print("看一下結果")
}
標識符模式:標識符模式匹配任何值,并將匹配的值和一個變量或常量綁定起來。
舉例:
let numT: UInt = 5
var length: String = 8
值綁定模式:把匹配到的值綁定給一個常量或變量。
舉例:
let point = (3,2)
switch point {
// 將point中的元素綁定到x和y
case let (x,y):
? ? print("x is \(x),y is \(y)")
default:
? ? print("默認選項")
}
元組模式:元組模式由逗號分隔,具有零個或多個模式的列表,并由一對圓括號括起來。
舉例:(3,2)
枚舉用例模式:匹配現有的某個枚舉的某個用例。枚舉用例模式出現在switch語句中的case標簽中,以及if、while、guard和for-in語句的case條件中。
? public enum AnimationTransition : Int {
? ? ? ? case none
? ? ? ? case flipFromLeft
? ? ? ? case flipFromRight
? ? ? ? case curlUp
? ? ? ? case curlDown
? ? }
可選項模式:可選項用 ?表示,可選項模式為for-in語句提供了一種迭代數組的簡便方式,只為數組中非nil的元素執行循環體
舉例:
let arr: [Int?] = [nil,5,8,0,nil,7]
for case let num? in arr {
? ? print(num)
}
類型轉換模式:有兩種類型轉換模式,is模式和as模式。is模式只出現在switch語句中的case標簽中。形式如下
is 類型:is模式僅當一個值的類型在運行時和is模式右邊的指定類型一致,或者是其子類的情況下,才會匹配這個值。is模式沒有返回類型
模式 as 類型:as模式僅當一個值的類型在運行時和as模式右邊的指定類型一致,或者是其子類的情況下,才會匹配這個值。如果匹配成功,被匹配的值的類型
protocol Animal {
? ? var name: String { get }
}
struct Dog: Animal {
? ? var name: String = "dog"
? ? var runSpeen: Int
}
struct Bird: Animal {
? ? var name: String = "bird"
? ? var flightHright: Int
}
struct Fish: Animal {
? ? var name: String = "fish"
? ? var depth: Int
}
let animals:[Any] = [Dog(name: "Tydi", runSpeen: 5),Bird(flightHright: 8),Fish(depth: 9)]
for animal in animals {
? ? switch animal {
? ? case let dog as Dog:
? ? ? ? print("name:\(dog.name),跑得快\(dog.runSpeen)")
? ? case let bird as Bird:
? ? ? ? print("name is \(bird.name)")
? ? default:
? ? ? ? print("未知種類\(animal)")
? ? }
}
表達式模式:表達式的值,只出現在switch語句的case標簽中。表達式模式代表的表達式會使用~=運算符與輸入表達式的值進行比較。~=運算符可以查看一個范圍是否包含某個值,如果~=運算符返回true,則匹配成功。
舉例:
let point = (2,3)
switch point {
case (0,0):
? ? print("原點")
case (-2...2,-3...3):
? ? print("離原點較近")
default:
? ? print("X坐標\(point.0)Y坐標\(point.1)")
}
自定義類型無法進行表達式模式匹配,需要重載~=運算符
舉例:
struct Employee {
? ? var salary: Int
}
let A = Employee(salary: 450)
func ~=(left:Range<Int>,right:Employee) -> Bool {
? ? return left.contains(right.salary)
}
switch A {
case 0..<200:
? ? print("艱難生活")
case 200..<400:
? ? print("還不錯")
case 400..<500:
? ? print("美滋滋")
default:
? ? print("未知情況")
}
?
總結
以上是生活随笔為你收集整理的Swift中的模式分类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 本地仓库管理权限问题
- 下一篇: Swift中的集合类之数组