doc: update docs/swift.md
This commit is contained in:
parent
57d42b29ba
commit
6122942c95
198
docs/swift.md
198
docs/swift.md
@ -524,8 +524,8 @@ let zeroToThree = 0...3
|
||||
### stride() 函数
|
||||
|
||||
```swift
|
||||
for oddNum in stride(from: 1, to: 5, by: 2) {
|
||||
print(oddNum)
|
||||
for num in stride(from: 1, to: 5, by: 2) {
|
||||
print(num)
|
||||
}
|
||||
// 打印: 1
|
||||
// 打印: 3
|
||||
@ -544,6 +544,7 @@ for char in "hehe" {
|
||||
```
|
||||
|
||||
### continue 关键字
|
||||
<!--rehype:wrap-class=row-span-2-->
|
||||
|
||||
```swift
|
||||
for num in 0...5 {
|
||||
@ -560,6 +561,7 @@ for num in 0...5 {
|
||||
`continue` 关键字将强制循环继续进行下一次迭代
|
||||
|
||||
### break 关键字
|
||||
<!--rehype:wrap-class=row-span-2-->
|
||||
|
||||
```swift
|
||||
for char in "supercalifragilistice" {
|
||||
@ -586,21 +588,58 @@ for _ in 1...3 {
|
||||
// 打印: Olé
|
||||
```
|
||||
|
||||
### 遍历指定范围
|
||||
|
||||
```swift
|
||||
for i in 0...10 {
|
||||
print(i) //0 到 10
|
||||
}
|
||||
```
|
||||
|
||||
封闭指定范围操作符(...)
|
||||
|
||||
### while 循环
|
||||
|
||||
```swift
|
||||
var counter = 1
|
||||
var stopNum = Int.random(in: 1...10)
|
||||
|
||||
// 循环打印,直到满足停止条件
|
||||
while counter < stopNum {
|
||||
print(counter)
|
||||
counter += 1
|
||||
}
|
||||
// 循环打印,直到满足停止条件
|
||||
```
|
||||
|
||||
`while` 循环接受一个条件,并在所提供的条件为 `true` 时持续执行其主体代码。如果条件从不为假,则循环将继续运行,程序将陷入`无限循环`
|
||||
|
||||
### repeate while
|
||||
|
||||
```swift
|
||||
var counter = 1
|
||||
|
||||
repeat {
|
||||
print(counter)
|
||||
counter += 1
|
||||
} while counter <= 5
|
||||
```
|
||||
|
||||
至少执行一次
|
||||
|
||||
### 遍历字典对象
|
||||
|
||||
```swift
|
||||
// 创建一个字典
|
||||
var myDictionary = [
|
||||
"name": "John", "age": 25
|
||||
]
|
||||
|
||||
// 使用for-in循环遍历字典
|
||||
for (key, value) in myDictionary {
|
||||
print("\(key): \(value)")
|
||||
}
|
||||
```
|
||||
|
||||
数组和集合
|
||||
----
|
||||
|
||||
@ -729,7 +768,7 @@ oddNumbers.remove(2)
|
||||
oddNumbers.removeAll()
|
||||
```
|
||||
|
||||
### .contains()
|
||||
### .contains() 检测数组中的值
|
||||
|
||||
```swift
|
||||
var names: Set = ["Rosa", "Doug", "Waldo"]
|
||||
@ -1003,6 +1042,8 @@ func washCar() -> Void {
|
||||
}
|
||||
```
|
||||
|
||||
返回值为空的函数(void)
|
||||
|
||||
### 调用函数
|
||||
|
||||
```swift
|
||||
@ -1105,7 +1146,7 @@ greet(person: "Aliya") // Hello Aliya
|
||||
```swift
|
||||
var currentSeason = "冬天"
|
||||
|
||||
func season(month: Int, name: inout String) {
|
||||
func season(month:Int, name:inout String) {
|
||||
switch month {
|
||||
case 1...2:
|
||||
name = "冬天 ⛄️"
|
||||
@ -1144,9 +1185,67 @@ func getFirstInitial(from name: String?) -> String? {
|
||||
return name?.first
|
||||
}
|
||||
```
|
||||
<!--rehype:className=wrap-text-->
|
||||
|
||||
函数可以接受可选类型并返回可选类型。当一个函数不能返回请求类型的合理实例时,它应该返回 `nil`
|
||||
|
||||
### 省略 return 关键字
|
||||
|
||||
```swift
|
||||
func multiply(x: Int, y: Int) -> Int {
|
||||
x * y
|
||||
}
|
||||
```
|
||||
|
||||
### 额外指定参数命名标签
|
||||
<!--rehype:wrap-class=row-span-2-->
|
||||
|
||||
```swift
|
||||
func calculate(of numbers: Int...) -> Int {
|
||||
var sum = 0
|
||||
|
||||
for number in numbers {
|
||||
sum += number
|
||||
}
|
||||
|
||||
return sum
|
||||
}
|
||||
|
||||
// 调用函数时,使用外部参数名
|
||||
let result = calculate(of: 1, 2, 3, 4, 5)
|
||||
print("Sum: \(result)")
|
||||
```
|
||||
|
||||
### 函数作为参数
|
||||
<!--rehype:wrap-class=row-span-2-->
|
||||
|
||||
```swift
|
||||
func doMath(
|
||||
operation: (Int, Int) -> Int,
|
||||
a: Int, b: Int
|
||||
) -> Int {
|
||||
return operation(a, b)
|
||||
}
|
||||
// 定义一些可以作为参数传递的函数
|
||||
func add(_ a: Int, _ b: Int) -> Int {
|
||||
return a + b
|
||||
}
|
||||
// 使用 doMath 函数,并将 add 函数作为参数传递
|
||||
let result = doMath(5, 3, operation: add)
|
||||
print("Addition Result: \(result)")
|
||||
```
|
||||
|
||||
### 闭包
|
||||
|
||||
```swift
|
||||
let add: (Int, Int) -> Int = { (a, b) in
|
||||
return a + b
|
||||
}
|
||||
// 调用闭包
|
||||
let result = add(3, 5)
|
||||
print("Sum: \(result)")
|
||||
```
|
||||
|
||||
结构
|
||||
----
|
||||
|
||||
@ -1403,6 +1502,17 @@ let resolution = Resolution(width: 1920)
|
||||
let someVideoMode = VideoMode()
|
||||
```
|
||||
|
||||
### 类的扩展
|
||||
|
||||
```swift
|
||||
extension String {
|
||||
var boolValue: Bool {
|
||||
return self == "1"
|
||||
}
|
||||
}
|
||||
let isTure = "0".boolValue
|
||||
```
|
||||
|
||||
枚举
|
||||
----
|
||||
|
||||
@ -1431,8 +1541,8 @@ enum Dessert {
|
||||
case brownie
|
||||
}
|
||||
|
||||
let customerOrder: Dessert = .cake(flavor: "红色天鹅绒")
|
||||
switch customerOrder {
|
||||
let custom: Dessert = .cake(flavor: "红色")
|
||||
switch custom {
|
||||
case let .cake(flavor):
|
||||
print("你点了一个 \(flavor) 蛋糕")
|
||||
case .brownie:
|
||||
@ -1478,29 +1588,33 @@ enum Dessert {
|
||||
case brownie
|
||||
}
|
||||
|
||||
let order: Dessert = .cake(flavor: "红色天鹅绒")
|
||||
let order: Dessert = .cake(flavor: "红色")
|
||||
```
|
||||
|
||||
### 实例方法
|
||||
### 枚举的可赋值性
|
||||
<!--rehype:wrap-class=row-span-2-->
|
||||
|
||||
```swift
|
||||
enum Traffic {
|
||||
case light
|
||||
case heavy
|
||||
|
||||
mutating func reportAccident() {
|
||||
self = .heavy
|
||||
}
|
||||
enum Content {
|
||||
case empty
|
||||
case text(Strig)
|
||||
case number(Int)
|
||||
}
|
||||
|
||||
var currentTraffic: Traffic = .light
|
||||
|
||||
currentTraffic.reportAccident()
|
||||
// currentTraffic 现在是 .heavy
|
||||
```
|
||||
|
||||
就像类和结构一样,枚举也可以有实例方法。如果实例方法改变了枚举的值,则需要将其标记为 `mutating`
|
||||
使用 switch 处理可赋值枚举
|
||||
|
||||
```swift
|
||||
let content = Content.text("Hello")
|
||||
swithc content {
|
||||
case .empty:
|
||||
print("Value is empty")
|
||||
case .text(let value):
|
||||
print("Value is \(value)")
|
||||
case .number(_): //不调用时,可以省略
|
||||
print("Value is a number")
|
||||
}
|
||||
```
|
||||
|
||||
### 从原始值初始化
|
||||
|
||||
@ -1530,6 +1644,46 @@ enum ShirtSize: String {
|
||||
}
|
||||
```
|
||||
|
||||
### 遍历字符串
|
||||
|
||||
```swift
|
||||
enum Currency: String {
|
||||
case euro = "EUR"
|
||||
case dollar = "USD"
|
||||
case pound = "GBP"
|
||||
}
|
||||
```
|
||||
|
||||
输出枚举的原始值
|
||||
|
||||
```swift
|
||||
let euroSymbol = Currency.euro.rawValue
|
||||
print("欧元的货币符号是 \(euroSymbol)")
|
||||
```
|
||||
|
||||
### 实例方法
|
||||
|
||||
```swift
|
||||
enum Traffic {
|
||||
case light
|
||||
case heavy
|
||||
|
||||
mutating func reportAccident() {
|
||||
self = .heavy
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
枚举也可以有实例方法
|
||||
|
||||
```swift
|
||||
var currentTraffic: Traffic = .light
|
||||
currentTraffic.reportAccident()
|
||||
// currentTraffic 现在是 .heavy
|
||||
```
|
||||
|
||||
实例方法改变了枚举的值,则需要将其标记为 `mutating`
|
||||
|
||||
另见
|
||||
----
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user