实例方法
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:)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。