This function is used to copy the values of all enumerable own properties from one or more
source struct to a target struct.
If the argument is a reference type the same refence is returned.
public func assign<T>(_ value: T, changes: (inout T) -> Void) -> T
Partial
Constructs a type with all properties of T set to optional. This utility will return a type
that represents all subsets of a given type.
The wrapped type can be then constructed at referred time by calling the build() method.
The instance can be later on changed with the merge(inout _:) method.
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)
ReadOnly
Constructs a type with all properties of T set to readonly, meaning the properties of
the constructed type cannot be reassigned.
Note A read-only object can propagate change events if the wrapped type ia an
ObservableObject by calling propagateObservableObject() at construction time.
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"
ObservableProxy
Creates an observable Proxy for the object passed as argument (with granularity at the
property level).
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"
Concurrency
This package offer a variety of different lock implementations:
Mutex: enforces limits on access to a resource when there are many threads
of execution.
UnfairLock: low-level lock that allows waiters to block efficiently on contention.
ReadersWriterLock: readers-writer lock provided by the platform implementation
of the POSIX Threads standard.
Property wrappers to work with any of the locks above or any NSLocking compliant lock:
@LockAtomic<L: Locking>
@SyncDispatchQueueAtomic
@ReadersWriterAtomic
The package also includes LockfreeAtomic: fine-grained atomic operations allowing for Lockfree concurrent programming. Each atomic operation is indivisible with regards to any other atomic operation that involves the same object.
Primer
Assign
This function is used to copy the values of all enumerable own properties from one or more source struct to a target struct. If the argument is a reference type the same refence is returned.
Partial
Constructs a type with all properties of T set to optional. This utility will return a type that represents all subsets of a given type.
The wrapped type can be then constructed at referred time by calling the
build()
method. The instance can be later on changed with themerge(inout _:)
method.ReadOnly
Constructs a type with all properties of T set to readonly, meaning the properties of the constructed type cannot be reassigned.
Note A read-only object can propagate change events if the wrapped type ia an
ObservableObject
by callingpropagateObservableObject()
at construction time.ObservableProxy
Creates an observable Proxy for the object passed as argument (with granularity at the property level).
Concurrency
This package offer a variety of different lock implementations:
Mutex
: enforces limits on access to a resource when there are many threads of execution.UnfairLock
: low-level lock that allows waiters to block efficiently on contention.ReadersWriterLock
: readers-writer lock provided by the platform implementation of the POSIX Threads standard.Property wrappers to work with any of the locks above or any
NSLocking
compliant lock:@LockAtomic<L: Locking>
@SyncDispatchQueueAtomic
@ReadersWriterAtomic
The package also includes
LockfreeAtomic
: fine-grained atomic operations allowing for Lockfree concurrent programming. Each atomic operation is indivisible with regards to any other atomic operation that involves the same object.