Swift 泛型提供了強大的類型安全和代碼復用功能。以下是一些常見的 Swift 泛型用法:
類型參數化: 泛型允許你編寫可以處理多種數據類型的函數或類,而不需要為每種數據類型編寫重復的代碼。例如:
func print<T>(_ value: T) {
print(value)
}
print("Hello, world!") // 輸出 "Hello, world!"
print(42) // 輸出 "42"
泛型約束: 你可以使用泛型約束來限制泛型類型必須滿足某些條件,例如遵循某個協議或具有某個屬性。例如:
protocol Printable {
func print()
}
func print<T: Printable>(_ value: T) {
value.print()
}
struct MyStruct: Printable {
func print() {
print("MyStruct")
}
}
let myStruct = MyStruct()
print(myStruct) // 輸出 "MyStruct"
泛型類型推斷: Swift 編譯器可以根據上下文自動推斷泛型類型,無需顯式指定。例如:
let array = [1, 2, 3]
array.forEach { print($0) } // 編譯器自動推斷 $0 為 Int 類型
泛型函數: 泛型函數允許你編寫可以處理多種數據類型的函數。例如:
func add<T: BinaryInteger>(_ a: T, _ b: T) -> T {
return a + b
}
let result1 = add(1, 2) // result1 是 Int 類型
let result2 = add(1.0, 2.0) // result2 是 Double 類型
泛型類: 泛型類允許你編寫可以處理多種數據類型的類。例如:
class Box<T> {
var value: T
init(_ value: T) {
self.value = value
}
}
let intBox = Box(1)
let doubleBox = Box(1.0)
泛型協議: 泛型協議允許你定義一個協議,該協議可以被任何類型實現,只要該類型滿足協議中定義的方法。例如:
protocol MyProtocol {
associatedtype Item
func process(_ item: Item)
}
struct MyStruct<T>: MyProtocol {
typealias Item = T
func process(_ item: T) {
print("Processing \(item)")
}
}
let myStruct = MyStruct<Int>()
myStruct.process(42) // 輸出 "Processing 42"
這些只是 Swift 泛型的一些常見用法。通過使用泛型,你可以編寫更加靈活、可復用和類型安全的代碼。