此函数用于将一个或多个源结构中的所有可枚举的自有属性的值复制到目标结构。如果参数是引用类型,则返回相同的引用。
public func assign<T>(_ value: T, changes: (inout T) -> Void) -> T
构造一个类型,并将 T 的所有属性设置为可选。 此实用程序将返回表示给定类型的所有子集的类型。
然后可以通过调用 build()
方法在引用时构造包装的类型。 以后可以使用 merge(inout _:)
方法更改实例。
struct Todo { var title: String; var description: String }
var partial = Partial { .success(Todo(
title: $0.get(\Todo.title, default: "Untitled"),
description: $0.get(\Todo.description, default: "No description")))
}
partial.title = "A Title"
partial.description = "A Description"
var todo = try! partial.build().get()
partial.description = "Another Descrition"
todo = partial.merge(&todo)
构造一个类型,并将 T 的所有属性设置为只读,这意味着不能重新分配构造类型的属性。
注意 如果包装的类型是 ObservableObject
,则只读对象可以通过在构造时调用 propagateObservableObject()
来传播更改事件。
struct Todo { var title: String; var description: String }
let todo = Todo(title: "A Title", description: "A Description")
let readOnlyTodo = ReadOnly(todo)
readOnlyTodo.title // "A title"
为作为参数传递的对象创建可观察的代理(粒度达到属性级别)。
struct Todo { var title: String; var description: String }
let todo = Todo(title: "A Title", description: "A Description")
let proxy = Proxy(todo)
proxy.propertyDidChange.sink {
if $0.match(keyPath: \.title) {
...
}
}
proxy.title = "New Title"
此包提供各种不同的锁实现
Mutex
:在有多个执行线程时,强制限制对资源的访问。UnfairLock
:底层锁,允许等待者在争用时有效地阻塞。ReadersWriterLock
:由 POSIX 线程标准平台实现提供的读者-写者锁。属性包装器,用于处理上述任何锁或任何符合 NSLocking
的锁
@LockAtomic<L: Locking>
@SyncDispatchQueueAtomic
@ReadersWriterAtomic
该包还包括 LockfreeAtomic
:细粒度的原子操作,允许进行 Lockfree 并发编程。 每个原子操作对于涉及同一对象的任何其他原子操作都是不可分割的。