mirror of
https://github.com/JohnEstropia/CoreStore.git
synced 2026-01-11 22:30:34 +01:00
Xcode 14, iOS 16 SDK (min iOS 13)
This commit is contained in:
@@ -30,7 +30,6 @@ import Combine
|
||||
|
||||
// MARK: - ListPublisher: ObservableObject
|
||||
|
||||
@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *)
|
||||
extension CoreStoreObject: ObservableObject {
|
||||
|
||||
// MARK: ObservableObject
|
||||
|
||||
@@ -425,7 +425,7 @@ extension DataStack {
|
||||
operations.append(
|
||||
BlockOperation { [weak self] in
|
||||
|
||||
guard let `self` = self, !cancelled else {
|
||||
guard let self = self, !cancelled else {
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
@@ -30,7 +30,6 @@ import Combine
|
||||
|
||||
// MARK: - DataStack
|
||||
|
||||
@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *)
|
||||
extension DataStack {
|
||||
|
||||
// MARK: Public
|
||||
@@ -70,7 +69,6 @@ extension DataStack {
|
||||
|
||||
// MARK: - DataStack.ReactiveNamespace
|
||||
|
||||
@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *)
|
||||
extension DataStack.ReactiveNamespace {
|
||||
|
||||
// MARK: Public
|
||||
|
||||
@@ -30,7 +30,6 @@ import CoreData
|
||||
|
||||
// MARK: - DataStack
|
||||
|
||||
@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *)
|
||||
extension DataStack {
|
||||
|
||||
// MARK: - AddStoragePublisher
|
||||
|
||||
@@ -34,6 +34,11 @@ import CoreData
|
||||
*/
|
||||
public protocol DynamicObject: AnyObject {
|
||||
|
||||
/**
|
||||
The object ID for this instance
|
||||
*/
|
||||
typealias ObjectID = NSManagedObjectID
|
||||
|
||||
/**
|
||||
Used internally by CoreStore. Do not call directly.
|
||||
*/
|
||||
@@ -68,11 +73,6 @@ public protocol DynamicObject: AnyObject {
|
||||
extension DynamicObject {
|
||||
|
||||
// MARK: Internal
|
||||
|
||||
/**
|
||||
The object ID for this instance
|
||||
*/
|
||||
public typealias ObjectID = NSManagedObjectID
|
||||
|
||||
internal func runtimeType() -> Self.Type {
|
||||
|
||||
|
||||
@@ -33,7 +33,6 @@ import CoreData
|
||||
|
||||
// MARK: - EnvironmentValues
|
||||
|
||||
@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *)
|
||||
extension EnvironmentValues {
|
||||
|
||||
// MARK: Public
|
||||
@@ -60,7 +59,6 @@ extension EnvironmentValues {
|
||||
|
||||
// MARK: - DataStackEnvironmentKey
|
||||
|
||||
@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *)
|
||||
fileprivate struct DataStackKey: EnvironmentKey {
|
||||
|
||||
// MARK: FilePrivate
|
||||
|
||||
@@ -54,14 +54,7 @@ extension FieldCoders {
|
||||
|
||||
internal static var transformerName: NSValueTransformerName {
|
||||
|
||||
if #available(iOS 12.0, tvOS 12.0, watchOS 5.0, macOS 10.14, *) {
|
||||
|
||||
return .secureUnarchiveFromDataTransformerName
|
||||
}
|
||||
else {
|
||||
|
||||
return .keyedUnarchiveFromDataTransformerName
|
||||
}
|
||||
return .secureUnarchiveFromDataTransformerName
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,7 +31,6 @@ import SwiftUI
|
||||
|
||||
// MARK: - ForEach
|
||||
|
||||
@available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *)
|
||||
extension ForEach where Content: View {
|
||||
|
||||
// MARK: Public
|
||||
|
||||
@@ -74,45 +74,21 @@ extension Internals {
|
||||
|
||||
internal func register() {
|
||||
|
||||
let transformerName = self.transformerName
|
||||
if #available(iOS 12.0, tvOS 12.0, watchOS 5.0, macOS 10.14, *) {
|
||||
switch self.transformerName {
|
||||
|
||||
switch transformerName {
|
||||
case .secureUnarchiveFromDataTransformerName,
|
||||
.isNotNilTransformerName,
|
||||
.isNilTransformerName,
|
||||
.negateBooleanTransformerName:
|
||||
return
|
||||
|
||||
case .secureUnarchiveFromDataTransformerName,
|
||||
.isNotNilTransformerName,
|
||||
.isNilTransformerName,
|
||||
.negateBooleanTransformerName:
|
||||
return
|
||||
case let transformerName:
|
||||
Self.cachedCoders[transformerName] = self
|
||||
|
||||
case let transformerName:
|
||||
Self.cachedCoders[transformerName] = self
|
||||
|
||||
Foundation.ValueTransformer.setValueTransformer(
|
||||
self.transformer,
|
||||
forName: transformerName
|
||||
)
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
||||
switch transformerName {
|
||||
|
||||
case .keyedUnarchiveFromDataTransformerName,
|
||||
.unarchiveFromDataTransformerName,
|
||||
.isNotNilTransformerName,
|
||||
.isNilTransformerName,
|
||||
.negateBooleanTransformerName:
|
||||
return
|
||||
|
||||
case let transformerName:
|
||||
Self.cachedCoders[transformerName] = self
|
||||
|
||||
Foundation.ValueTransformer.setValueTransformer(
|
||||
self.transformer,
|
||||
forName: transformerName
|
||||
)
|
||||
}
|
||||
Foundation.ValueTransformer.setValueTransformer(
|
||||
self.transformer,
|
||||
forName: transformerName
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -812,7 +812,7 @@ public final class ListMonitor<O: DynamicObject>: Hashable {
|
||||
object: self,
|
||||
closure: { [weak self] (note) -> Void in
|
||||
|
||||
guard let `self` = self else {
|
||||
guard let self = self else {
|
||||
|
||||
return
|
||||
}
|
||||
@@ -841,7 +841,7 @@ public final class ListMonitor<O: DynamicObject>: Hashable {
|
||||
object: self,
|
||||
closure: { [weak self] (note) -> Void in
|
||||
|
||||
guard let `self` = self,
|
||||
guard let self = self,
|
||||
let userInfo = note.userInfo,
|
||||
let rawObject = userInfo[String(describing: NSManagedObject.self)] as? NSManagedObject else {
|
||||
|
||||
@@ -877,7 +877,7 @@ public final class ListMonitor<O: DynamicObject>: Hashable {
|
||||
object: self,
|
||||
closure: { [weak self] (note) -> Void in
|
||||
|
||||
guard let `self` = self,
|
||||
guard let self = self,
|
||||
let userInfo = note.userInfo,
|
||||
let sectionInfo = userInfo[String(describing: NSFetchedResultsSectionInfo.self)] as? NSFetchedResultsSectionInfo,
|
||||
let sectionIndex = (userInfo[String(describing: NSNumber.self)] as? NSNumber)?.intValue else {
|
||||
@@ -1148,7 +1148,7 @@ public final class ListMonitor<O: DynamicObject>: Hashable {
|
||||
|
||||
self.taskGroup.notify(queue: .main) { [weak self] () -> Void in
|
||||
|
||||
guard let `self` = self else {
|
||||
guard let self = self else {
|
||||
|
||||
return
|
||||
}
|
||||
@@ -1164,7 +1164,7 @@ public final class ListMonitor<O: DynamicObject>: Hashable {
|
||||
|
||||
self.transactionQueue.async { [weak self] in
|
||||
|
||||
guard let `self` = self else {
|
||||
guard let self = self else {
|
||||
|
||||
return
|
||||
}
|
||||
@@ -1183,7 +1183,7 @@ public final class ListMonitor<O: DynamicObject>: Hashable {
|
||||
}
|
||||
newFetchedResultsControllerDelegate.taskGroup.notify(queue: .main) { [weak self] () -> Void in
|
||||
|
||||
guard let `self` = self else {
|
||||
guard let self = self else {
|
||||
|
||||
return
|
||||
}
|
||||
@@ -1338,7 +1338,7 @@ public final class ListMonitor<O: DynamicObject>: Hashable {
|
||||
queue: OperationQueue.main,
|
||||
closure: { [weak self] (note) -> Void in
|
||||
|
||||
guard let `self` = self else {
|
||||
guard let self = self else {
|
||||
|
||||
return
|
||||
}
|
||||
@@ -1360,7 +1360,7 @@ public final class ListMonitor<O: DynamicObject>: Hashable {
|
||||
queue: OperationQueue.main,
|
||||
closure: { [weak self] (note) -> Void in
|
||||
|
||||
guard let `self` = self else {
|
||||
guard let self = self else {
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
@@ -30,7 +30,6 @@ import Combine
|
||||
|
||||
// MARK: - ListPublisher
|
||||
|
||||
@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *)
|
||||
extension ListPublisher {
|
||||
|
||||
// MARK: Public
|
||||
@@ -71,7 +70,6 @@ extension ListPublisher {
|
||||
|
||||
// MARK: - ListPublisher.ReactiveNamespace
|
||||
|
||||
@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *)
|
||||
extension ListPublisher.ReactiveNamespace {
|
||||
|
||||
// MARK: Public
|
||||
|
||||
@@ -30,7 +30,6 @@ import CoreData
|
||||
|
||||
// MARK: - ListPublisher
|
||||
|
||||
@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *)
|
||||
extension ListPublisher {
|
||||
|
||||
// MARK: - SnapshotPublisher
|
||||
|
||||
@@ -34,7 +34,6 @@ import SwiftUI
|
||||
/**
|
||||
A container view that reads list changes in a `ListPublisher`
|
||||
*/
|
||||
@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *)
|
||||
public struct ListReader<Object: DynamicObject, Content: View, Value>: View {
|
||||
|
||||
// MARK: Internal
|
||||
|
||||
@@ -35,7 +35,6 @@ import SwiftUI
|
||||
A property wrapper type that can read `ListPublisher` changes.
|
||||
*/
|
||||
@propertyWrapper
|
||||
@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *)
|
||||
public struct ListState<Object: DynamicObject>: DynamicProperty {
|
||||
|
||||
// MARK: Public
|
||||
|
||||
@@ -108,7 +108,7 @@ extension NSManagedObjectContext {
|
||||
@nonobjc
|
||||
internal func objectsDidChangeObserver<U: AnyObject>(for observer: U) -> Internals.SharedNotificationObserver<(updated: Set<NSManagedObjectID>, deleted: Set<NSManagedObjectID>)> {
|
||||
|
||||
return self.userInfo(for: .objectsChangeObserver(U.self)) { [unowned self] in
|
||||
return self.userInfo(for: .objectsChangeObserver(U.self)) {
|
||||
|
||||
return .init(
|
||||
notificationName: .NSManagedObjectContextObjectsDidChange,
|
||||
@@ -175,7 +175,7 @@ extension NSManagedObjectContext {
|
||||
}
|
||||
}
|
||||
|
||||
private func userInfo<T>(for key: UserInfoKeys, initialize: @escaping () -> T) -> T {
|
||||
private func userInfo<T>(for key: UserInfoKeys, initialize: () -> T) -> T {
|
||||
|
||||
let keyString = key.keyString
|
||||
if let value = self.userInfo[keyString] as? T {
|
||||
|
||||
@@ -299,7 +299,7 @@ public final class ObjectMonitor<O: DynamicObject>: Hashable, ObjectRepresentati
|
||||
toObserver: observer,
|
||||
callback: { [weak self, weak observer] (monitor, object) -> Void in
|
||||
|
||||
guard let `self` = self, let observer = observer else {
|
||||
guard let self = self, let observer = observer else {
|
||||
|
||||
return
|
||||
}
|
||||
@@ -370,7 +370,7 @@ public final class ObjectMonitor<O: DynamicObject>: Hashable, ObjectRepresentati
|
||||
object: self,
|
||||
closure: { [weak self] _ in
|
||||
|
||||
guard let `self` = self else {
|
||||
guard let self = self else {
|
||||
|
||||
return
|
||||
}
|
||||
@@ -395,7 +395,7 @@ public final class ObjectMonitor<O: DynamicObject>: Hashable, ObjectRepresentati
|
||||
object: self,
|
||||
closure: { [weak self] (note) in
|
||||
|
||||
guard let `self` = self,
|
||||
guard let self = self,
|
||||
let userInfo = note.userInfo,
|
||||
let object = userInfo[String(describing: NSManagedObject.self)] as! NSManagedObject? else {
|
||||
|
||||
|
||||
@@ -31,7 +31,6 @@ import CoreData
|
||||
|
||||
// MARK: - ObjectPublisher
|
||||
|
||||
@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *)
|
||||
extension ObjectPublisher {
|
||||
|
||||
// MARK: Public
|
||||
@@ -73,7 +72,6 @@ extension ObjectPublisher {
|
||||
|
||||
// MARK: - ObjectPublisher.ReactiveNamespace
|
||||
|
||||
@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *)
|
||||
extension ObjectPublisher.ReactiveNamespace {
|
||||
|
||||
// MARK: Public
|
||||
@@ -108,7 +106,6 @@ extension ObjectPublisher.ReactiveNamespace {
|
||||
|
||||
// MARK: - ObjectPublisher.ReactiveNamespace where O: NSManagedObject
|
||||
|
||||
@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *)
|
||||
extension ObjectPublisher.ReactiveNamespace where O: NSManagedObject {
|
||||
|
||||
/**
|
||||
@@ -125,7 +122,6 @@ extension ObjectPublisher.ReactiveNamespace where O: NSManagedObject {
|
||||
|
||||
// MARK: - ObjectPublisher.ReactiveNamespace where O: CoreStoreObject
|
||||
|
||||
@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *)
|
||||
extension ObjectPublisher.ReactiveNamespace where O: CoreStoreObject {
|
||||
|
||||
/**
|
||||
|
||||
@@ -30,7 +30,6 @@ import CoreData
|
||||
|
||||
// MARK: - ObjectPublisher
|
||||
|
||||
@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *)
|
||||
extension ObjectPublisher {
|
||||
|
||||
// MARK: - SnapshotPublisher
|
||||
|
||||
@@ -34,7 +34,6 @@ import SwiftUI
|
||||
/**
|
||||
A container view that reads changes to an `ObjectPublisher`
|
||||
*/
|
||||
@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *)
|
||||
public struct ObjectReader<Object: DynamicObject, Content: View, Placeholder: View, Value>: View {
|
||||
|
||||
// MARK: Internal
|
||||
|
||||
@@ -35,7 +35,6 @@ import SwiftUI
|
||||
A property wrapper type that can read `ObjectPublisher` changes.
|
||||
*/
|
||||
@propertyWrapper
|
||||
@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *)
|
||||
public struct ObjectState<O: DynamicObject>: DynamicProperty {
|
||||
|
||||
// MARK: Public
|
||||
|
||||
@@ -183,14 +183,37 @@ public struct Where<O: DynamicObject>: WhereClauseType, FetchClause, QueryClause
|
||||
*/
|
||||
public init<V: FieldStorableType>(_ keyPath: KeyPathString, isEqualTo value: V) {
|
||||
|
||||
var nilPredicate: NSPredicate {
|
||||
|
||||
return NSPredicate(
|
||||
format: "\(keyPath) == nil"
|
||||
)
|
||||
}
|
||||
var valuePredicate: NSPredicate {
|
||||
|
||||
return NSPredicate(
|
||||
format: "\(keyPath) == %@",
|
||||
argumentArray: [value.cs_toFieldStoredNativeType() as Any]
|
||||
)
|
||||
}
|
||||
switch value {
|
||||
|
||||
case let optionalValue as any FieldOptionalType:
|
||||
switch optionalValue.cs_wrappedValue {
|
||||
|
||||
case nil,
|
||||
is NSNull:
|
||||
self.init(nilPredicate)
|
||||
|
||||
case _?:
|
||||
self.init(valuePredicate)
|
||||
}
|
||||
|
||||
case nil,
|
||||
is NSNull:
|
||||
self.init(NSPredicate(format: "\(keyPath) == nil"))
|
||||
case is NSNull:
|
||||
self.init(nilPredicate)
|
||||
|
||||
case let value:
|
||||
self.init(NSPredicate(format: "\(keyPath) == %@", argumentArray: [value.cs_toFieldStoredNativeType() as Any]))
|
||||
case _:
|
||||
self.init(valuePredicate)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user