Swift 擴(kuò)展(extension)允許您為現(xiàn)有類型添加新功能,而無(wú)需繼承該類型或修改其源代碼。關(guān)于 Swift 擴(kuò)展是否能處理多種類型的問(wèn)題,答案是:Swift 擴(kuò)展可以處理多種類型,但這取決于您如何定義和實(shí)現(xiàn)擴(kuò)展。
在 Swift 中,您可以為多個(gè)類型定義相同的擴(kuò)展,只要這些類型滿足擴(kuò)展所要求的條件(例如,遵循相同的協(xié)議)。這意味著您可以在一個(gè)擴(kuò)展中為多種類型添加相同的功能。
以下是一個(gè)示例,展示了如何為兩種不同的類型定義相同的擴(kuò)展:
// 定義一個(gè)協(xié)議
protocol MyProtocol {
func doSomething()
}
// 類型 A
struct TypeA {
func doSomething() {
print("TypeA is doing something")
}
}
// 類型 B
struct TypeB {
func doSomething() {
print("TypeB is doing something")
}
}
// 為 TypeA 和 TypeB 定義相同的擴(kuò)展
extension TypeA, TypeB where TypeA: MyProtocol, TypeB: MyProtocol {
static func performAction(on type: TypeA) {
type.doSomething()
}
static func performAction(on type: TypeB) {
type.doSomething()
}
}
// 使用擴(kuò)展
let typeA = TypeA()
typeA.performAction(on: typeA) // 輸出 "TypeA is doing something"
let typeB = TypeB()
typeB.performAction(on: typeB) // 輸出 "TypeB is doing something"
在這個(gè)示例中,我們?yōu)?TypeA
和 TypeB
定義了一個(gè)名為 MyProtocol
的協(xié)議,并為它們實(shí)現(xiàn)了該協(xié)議。然后,我們?yōu)?TypeA
和 TypeB
定義了一個(gè)擴(kuò)展,該擴(kuò)展包含兩個(gè)靜態(tài)方法 performAction(on:)
,這兩個(gè)方法接受 TypeA
或 TypeB
類型的參數(shù),并調(diào)用它們的 doSomething()
方法。這樣,我們就可以使用相同的擴(kuò)展為這兩種類型添加相同的功能。