當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Swift Result.Publisher assign(to:)用法及代碼示例


實例方法

assign(to:)

通過將元素分配給標記為發布者的屬性,重新發布從發布者接收到的元素。

聲明

func assign(to published: inout Published<Self.Output>.Publisher)
FailureNever 時可用。

參數

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+

相關用法


注:本文由純淨天空篩選整理自apple.com大神的英文原創作品 Result.Publisher assign(to:)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。