實例方法
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:)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
