1. 字面量
2. 模式
模式是用于匹配的规则,比如switch
的case
、捕捉错误的catch
、if/guard/while/for
语句的条件等
Swift的模式有:
- 通配模式
_
匹配任何值
_?
匹配非nil值
- 标识符模式
- 值绑定模式
- 元组模式
- 枚举case模式
if case
语句等价于只有一个case
的switch
语句
let age = 2
if case 0...9 = age{
print("[0,9]")
}
switch age{
case 0...9: print("[0,9]")
default:
break
}
let points = [(1, 0),(2, 2),(3, 0)]
for case let (x, 0) in points{
print("(\(x), 0)")
}
//(1, 0)
//(3, 0)
for case let (x, y) in points{
print("(\(x), (\(y))")
}
//(1, 0)
//(2, 2)
//(3, 0)
- 可选模式
let dogAge : Any? = 10
switch dogAge{
case is Int:
print("n is Int")
default: break
}
switch dogAge{
case let n as Int:
print("\(n) is Int")
default: break
}
- 表达式模式
let point = (1, 2)
switch point{
case (0, 0):
print("origin point");
case(-2...3, 1...3):
print(point)
default:
break
}
自定义表达模式
:可以通过重载运算符,自定义表达式模式的匹配规则
class Student {
var score = 0, name = ""
//pattern: case 后面的内容
//value : switch 后面的内容
static func ~= (pattern: Int, value: Student) -> Bool{
value.score >= pattern
}
static func ~= (pattern: ClosedRange<Int>, value: Student) -> Bool{
pattern.contains(value.score)
}
init(score: Int, name: String) {
self.score = score
self.name = name
}
}
var stu = Student(score: 75, name: "Jack")
switch stu{
case 100:
print(">= 100")
case 90:
print(">= 90")
case 80...90:
print("[80, 90]")
case 60...79:
print("[60, 79]")
case 0:
print(">= 0")
default:
break
}
var info = (Student(score: 50, name: "Jack"),"及格")
switch info{
case let (60, text):
print(text)
default:
print("不及格")
break
}
3. 条件编译
//操作系统:macOS/iOS/tvOS/watchOS/Linux/Linux/Android/Windows/FreeDSB
#if os(macOS)
//CPUJ架构 arch(x86_64) || arch(arm64)
#elseif arch(x86_64)
//swift版本
#elseif swift(<5)&&swift(>=3)
//模拟器
#elseif targetEnvironment(simulator)
//可导入某模块
#elseif canImport(Foundation)
#else
#endif
自定义条件编译
![](https://img.haomeiwen.com/i3409012/400a2d973c391501.png)
// 自定义条件编译
#if DEBUG
print("1")
#endif
// 自定义条件编译
#if isTest
print("2")
#else
print("22")
#endif
#if TEST
print("3")
#else
print("33")
#endif```
网友评论