實例方法
assign(to:)
通過將元素分配給標記為發布者的屬性,重新發布從發布者接收到的元素。
聲明
func assign(to published: inout Published<Self.Output>.Publisher)
當
Failure
為 Never
時可用。參數
published
用
@Published
屬性標記的屬性,它接收和重新發布從上遊發布者接收到的所有元素。
詳述
當您想要從發布者接收元素並通過標有 @Published
屬性的屬性重新發布它們時,請使用此運算符。 assign(to:)
運算符管理訂閱的生命周期,在 Published
實例取消初始化時自動取消訂閱。因此,assign(to:)
運算符不會像
那樣返回您負責的 assign(to:on:)
AnyCancellable
。
下麵的示例顯示了一個模型類,它從內部
接收元素,並將它們分配給名為 Timer.TimerPublisher
lastUpdated
的 @Published
屬性。因為to
參數有inout
關鍵字,調用該方法時需要使用&
運算符。
class MyModel: ObservableObject {
@Published var lastUpdated: Date = Date()
init() {
Timer.publish(every: 1.0, on: .main, in: .common)
.autoconnect()
.assign(to: &$lastUpdated)
}
}
如果您改為使用 assign(to: lastUpdated, on: self)
實現 MyModel
,則存儲返回的 AnyCancellable
實例可能會導致引用循環,因為 Subscribers/Assign
訂閱者將持有對 self
的強引用。使用assign(to:)
解決了這個問題。
雖然 to
參數使用 inout
關鍵字,但此方法不會替換傳遞給它的引用類型。相反,此符號表示操作符可以修改分配對象的成員,如下例所示:
class MyModel2: ObservableObject {
@Published var id: Int = 0
}
let model2 = MyModel2()
Just(100).assign(to: &model2.$id)
可用版本
iOS 14.0+, iPadOS 14.0+, macOS 11.0+, Mac Catalyst 14.0+, tvOS 14.0+, watchOS 7.0+
相關用法
- Swift Optional.Publisher assign(to:on:)用法及代碼示例
- Swift Optional.Publisher assertNoFailure(_:file:line:)用法及代碼示例
- Swift Optional.Publisher append(_:)用法及代碼示例
- Swift Optional.Publisher reduce(_:_:)用法及代碼示例
- Swift Optional.Publisher tryDrop(while:)用法及代碼示例
- Swift Optional.Publisher debounce(for:scheduler:options:)用法及代碼示例
- Swift Optional.Publisher breakpoint(receiveSubscription:receiveOutput:receiveCompletion:)用法及代碼示例
- Swift Optional.Publisher mapError(_:)用法及代碼示例
- Swift Optional.Publisher catch(_:)用法及代碼示例
- Swift Optional.Publisher tryAllSatisfy(_:)用法及代碼示例
- Swift Optional.Publisher zip(_:_:_:)用法及代碼示例
- Swift Optional.Publisher sink(receiveValue:)用法及代碼示例
- Swift Optional.Publisher scan(_:_:)用法及代碼示例
- Swift Optional.Publisher throttle(for:scheduler:latest:)用法及代碼示例
- Swift Optional.Publisher collect(_:)用法及代碼示例
- Swift Optional.Publisher combineLatest(_:_:_:_:)用法及代碼示例
- Swift Optional.Publisher share()用法及代碼示例
- Swift Optional.Publisher merge(with:_:_:)用法及代碼示例
- Swift Optional.Publisher map(_:_:)用法及代碼示例
- Swift Optional.Publisher zip(_:_:_:_:)用法及代碼示例
- Swift Optional.Publisher output(in:)用法及代碼示例
- Swift Optional.Publisher tryReduce(_:_:)用法及代碼示例
- Swift Optional.Publisher map(_:_:_:)用法及代碼示例
- Swift Optional.Publisher prepend(_:)用法及代碼示例
- Swift Optional.Publisher removeDuplicates()用法及代碼示例
注:本文由純淨天空篩選整理自apple.com大神的英文原創作品 Optional.Publisher assign(to:)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。