實例方法
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 Result.Publisher assign(to:on:)用法及代碼示例
- Swift Result.Publisher assertNoFailure(_:file:line:)用法及代碼示例
- Swift Result.Publisher append(_:)用法及代碼示例
- Swift Result.Publisher zip(_:_:_:)用法及代碼示例
- Swift Result.Publisher tryLast(where:)用法及代碼示例
- Swift Result.Publisher sink(receiveCompletion:receiveValue:)用法及代碼示例
- Swift Result.Publisher merge(with:_:_:)用法及代碼示例
- Swift Result.Publisher tryCompactMap(_:)用法及代碼示例
- Swift Result.Publisher print(_:to:)用法及代碼示例
- Swift Result.Publisher sink(receiveValue:)用法及代碼示例
- Swift Result.Publisher eraseToAnyPublisher()用法及代碼示例
- Swift Result.Publisher setFailureType(to:)用法及代碼示例
- Swift Result.Publisher first(where:)用法及代碼示例
- Swift Result.Publisher output(at:)用法及代碼示例
- Swift Result.Publisher tryCatch(_:)用法及代碼示例
- Swift Result.Publisher dropFirst(_:)用法及代碼示例
- Swift Result.Publisher merge(with:_:_:_:_:_:_:)用法及代碼示例
- Swift Result.Publisher flatMap(maxPublishers:_:)用法及代碼示例
- Swift Result.Publisher map(_:_:_:)用法及代碼示例
- Swift Result.Publisher catch(_:)用法及代碼示例
- Swift Result.Publisher drop(while:)用法及代碼示例
- Swift Result.Publisher prefix(_:)用法及代碼示例
- Swift Result.Publisher timeout(_:scheduler:options:customError:)用法及代碼示例
- Swift Result.Publisher merge(with:_:)用法及代碼示例
- Swift Result.Publisher map(_:)用法及代碼示例
注:本文由純淨天空篩選整理自apple.com大神的英文原創作品 Result.Publisher assign(to:)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。