Z
ZHANK
面向协议

协议 Protocol

protocol 定义/遵守、协议扩展默认实现、面向协议编程 POP

协议 Protocol

Swift 是面向协议编程(POP) 语言——协议定义蓝图,扩展提供默认实现,组合优于继承。

学完本章你将: 掌握 protocol 定义/遵守、协议扩展、POP 思想。


协议定义与遵守

swift
protocol Identifiable {
    var id: String { get }           // 可读属性
    func identify() -> String        // 方法
}

struct User: Identifiable {
    let id: String
    let name: String

    func identify() -> String {
        "User(\(id)): \(name)"
    }
}

协议扩展 —— 默认实现

swift
extension Identifiable {
    // 所有遵守者自动获得这个默认实现
    func identify() -> String {
        "ID: \(id)"
    }
}

struct Product: Identifiable {
    let id: String
    // 不需要实现 identify——用默认的
}

let p = Product(id: "P001")
print(p.identify())  // "ID: P001"

协议作为类型

swift
// 协议可以当类型使用
var items: [Identifiable] = [
    User(id: "1", name: "小明"),
    Product(id: "P001"),
]

for item in items {
    print(item.identify())
}

协议组合

swift
protocol Printable { func print() }
protocol Savable { func save() }

// 同时遵守两个协议
func process(item: Printable & Savable) {
    item.print()
    item.save()
}