Combine 是 Apple 推出的响应式编程框架,用于处理随时间变化的值。派生属性(Derived Properties)是指依赖于其他属性的属性,当依赖的属性发生变化时,派生属性也会相应地更新。在 Combine 中,可以使用 map
和 combineLatest
等操作符来实现派生属性。
Publisher
。map
或 combineLatest
等操作符来创建派生属性。Subscriber
上。假设我们有两个属性 firstName
和 lastName
,我们希望创建一个派生属性 fullName
,当 firstName
或 lastName
发生变化时,fullName
也会相应更新。
import Combine
class User {
@Published var firstName: String = ""
@Published var lastName: String = ""
private var cancellables = Set<AnyCancellable>()
var fullName: AnyPublisher<String, Never> {
return Publishers.CombineLatest($firstName, $lastName)
.map { "\($0) \($1)" }
.eraseToAnyPublisher()
}
init() {
// 订阅 fullName
fullName
.receive(on: RunLoop.main)
.sink { [weak self] fullName in
print("Full Name: \(fullName)")
}
.store(in: &cancellables)
}
}
let user = User()
user.firstName = "John"
user.lastName = "Doe"
firstName
和 lastName
是使用 @Published
属性包装器标记的属性,它们会自动发布变化事件。fullName
是一个计算属性,返回一个 AnyPublisher<String, Never>
。Publishers.CombineLatest($firstName, $lastName)
将 firstName
和 lastName
的变化事件结合起来。map
操作符将组合后的值转换为 fullName
。init
方法中,订阅 fullName
并在主线程上接收变化事件。sink
方法来处理 fullName
的变化,并打印出来。通过上述方法,你可以使用 Combine 实现派生属性,并在不同的应用场景中充分利用其优势。
领取专属 10元无门槛券
手把手带您无忧上云