Swift协议中associatedtype后=的含义解析——以ObservableObject为例
Swift关联类型默认值语法解析
你看到的= ObservableObjectPublisher是Swift 5.1新增的关联类型默认值语法,作用是给协议的关联类型指定一个默认实现类型,简化协议的使用流程。
具体到这段ObservableObject协议的代码:
- 协议要求关联类型
ObjectWillChangePublisher必须遵循Publisher协议,且Failure类型为Never - 加上
= ObservableObjectPublisher后,所有遵循ObservableObject的类型,如果没有显式声明ObjectWillChangePublisher的具体类型,编译器会自动将其默认设为ObservableObjectPublisher
实际使用场景
1. 使用默认类型(最常见)
当你创建遵循ObservableObject的类时,无需额外声明关联类型,直接用默认的ObservableObjectPublisher即可,比如配合@Published属性使用:
class UserViewModel: ObservableObject { // 自动使用ObservableObjectPublisher作为objectWillChange的类型 @Published var username: String = "" @Published var age: Int = 0 }
2. 自定义关联类型
如果有特殊需求,你也可以显式指定其他符合要求的Publisher类型(只要满足Publisher协议且Failure == Never),比如使用PassthroughSubject:
class CustomStateModel: ObservableObject { // 显式指定关联类型 typealias ObjectWillChangePublisher = PassthroughSubject<Void, Never> let objectWillChange = PassthroughSubject<Void, Never>() var isLoading: Bool = false { willSet { objectWillChange.send() } } }
内容的提问来源于stack exchange,提问作者kkklc
相关产品推荐
相关产品推荐

