mirror of
https://github.com/NohamR/knowledge-kit.git
synced 2026-05-25 12:27:15 +00:00
update: 动态库、静态库的编译链接细节
This commit is contained in:
@@ -197,7 +197,7 @@ class Stack<Element>: Stackable {
|
||||
|
||||
|
||||
|
||||
## Swift 范型本质
|
||||
## Swift 泛型本质
|
||||
|
||||
```swift
|
||||
func swapValue<T>(_ value1: inout T, _ value2: inout T) {
|
||||
@@ -223,13 +223,13 @@ swapValue(&s1, &s2)
|
||||
- 然后调用 `swapValue` 方法
|
||||
- 后续的 `String` 的 `SwapValue` 过程类似
|
||||
|
||||
所以编译器最后在执行的时候,会将范型真正的类型对应的 metadata 信息当作函数参数,传递进去,再去执行函数
|
||||
所以编译器最后在执行的时候,会将泛型真正的类型对应的 metadata 信息当作函数参数,传递进去,再去执行函数
|
||||
|
||||
|
||||
|
||||
## 范型类型约束
|
||||
## 泛型类型约束
|
||||
|
||||
范型必须遵循协议,可以在方法后加 `<>`,在 `<>` 内写范型 `T: 需要继承的类 & 协议` (也可以是其他名字,大多数语言都写 T),
|
||||
泛型必须遵循协议,可以在方法后加 `<>`,在 `<>` 内写泛型 `T: 需要继承的类 & 协议` (也可以是其他名字,大多数语言都写 T),
|
||||
|
||||
```swift
|
||||
protocol Runable {}
|
||||
@@ -239,7 +239,7 @@ func swapValue<T: Person & Runable>(_ a: inout T, _ b: inout T) {
|
||||
}
|
||||
```
|
||||
|
||||
另一种场景是在方法参数是某个范型且遵循协议后,对其范型有更多限制,则用 `where` 去处理。如下例子
|
||||
另一种场景是在方法参数是某个泛型且遵循协议后,对其泛型有更多限制,则用 `where` 去处理。如下例子
|
||||
|
||||
```swift
|
||||
protocol Stackable {
|
||||
|
||||
Reference in New Issue
Block a user