协议 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()
}