Given these two tables
lists
id | name | weight |
---|---|---|
1 | Groceries | 0 |
2 | Pharmacy | 1 |
3 | Misc | 2 |
import CloudKit | |
import Combine | |
/// A publisher that wraps a `CKFetchRecordZoneChangesOperation` and emits events as the operation completes. | |
/// | |
/// The `FetchRecordZoneChangesPublisher` fetches changes from the given record zones. New and deleted records are | |
/// posted individually via the `.recordChanged` and `.recordDeleted` actions. | |
/// | |
/// Errors are automatically retried if possible. Resetting the change token in case it expired is also automatically | |
/// handled. Because emitting errors fails a publisher all errors are posted as actions. There may still be running |
Given these two tables
lists
id | name | weight |
---|---|---|
1 | Groceries | 0 |
2 | Pharmacy | 1 |
3 | Misc | 2 |
extension Reducer { | |
/// Wraps a reducer to inject a debounced action back into the reducer. | |
/// | |
/// Use this higher order reducer when you want to schedule some work to happen after any other action is recieved by | |
/// the reducer. | |
/// | |
/// **Usage:** | |
/// ``` | |
/// otherReducer.debounceReactiveAction( | |
/// id: DebounceID(), |
import CloudKit | |
extension Error { | |
/// `true` if the error represents a CloudKit conflict. | |
var isCloudKitConflictError: Bool { | |
(self as? CKError).map { $0.code == CKError.Code.serverRecordChanged } ?? false | |
} | |
/// `true` if the error represents a CloudKit zone deleted error. |
import Combine | |
import ComposableArchitecture | |
import UIKit | |
/// The state store cell is a cell superclass designed to work with Composable Architecture state stores. It removes | |
/// much of the boiler plate involved with creating a custom cell subclass. | |
open class StateStoreCell<State: Equatable, Action>: UICollectionViewCell { | |
// MARK: Properties |
import CloudKit | |
import Combine | |
/// Fetches the user's CloudKit Account status. | |
/// | |
/// - Parameter container: The container to check the status in. | |
/// | |
/// - Returns: A deferred future that resolves to the user's CloudKit Account status. | |
func getAccountStatus(for container: CKContainer) -> AnyPublisher<CKAccountStatus, Error> { | |
Deferred { |
import UIKit | |
public protocol CellConfinable: UIView { | |
associatedtype Item | |
var isSelected: Bool { get set } | |
var isHighlighted: Bool { get set } | |
func prepareForReuse() | |
func configure(for item: Item) | |
} |
private final class OfferingButton: UIViewController { | |
@Published private var frame: CGRect = .zero | |
private var subscriptions: [AnyCancellable] = [] | |
override func viewWillAppear(_ animated: Bool) { | |
super.viewWillAppear(animated) | |
$frame.removeDuplicates() |
import SwiftUI | |
extension String: Identifiable { | |
public var id: String { self } | |
} | |
struct CollectionViewSizeKey<ID: Hashable>: PreferenceKey { | |
typealias Value = [ID: CGSize] | |
static var defaultValue: [ID: CGSize] { [:] } |
import SwiftUI | |
struct RoundedCorner: Shape { | |
var radius: CGFloat = .infinity | |
var corners: UIRectCorner = .allCorners | |
func path(in rect: CGRect) -> Path { | |
let path = UIBezierPath(roundedRect: rect, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius)) | |
return Path(path.cgPath) |