Fix enum to objc core data for app permission

This commit is contained in:
Joe Mattiello
2023-03-04 04:00:00 -05:00
parent 452cf89c95
commit 1f2693bea6
13 changed files with 90 additions and 17 deletions

View File

@@ -68,9 +68,30 @@ public extension ALTAppPermissionType {
}
@objc(AppPermission)
public class AppPermission: NSManagedObject, Decodable, Fetchable {
public class AppPermission: NSManagedObject, Decodable, Fetchable, NSKeyValueObservingCustomization {
public static func keyPathsAffectingValue(for key: AnyKeyPath) -> Set<AnyKeyPath> {
print("keyPathsAffectingValue: \(String(describing: key))")
return Set<AnyKeyPath>([key])
}
public static func automaticallyNotifiesObservers(for key: AnyKeyPath) -> Bool {
print("automaticallyNotifiesObservers: \(String(describing: key))")
return true
}
/* Properties */
@NSManaged public var type: ALTAppPermissionType
@objc(type)
@NSManaged public var _type: String
@nonobjc
public var type: ALTAppPermissionType {
get {
ALTAppPermissionType(rawValue: _type)
}
set {
_type = newValue.stringValue
}
}
@NSManaged public var usageDescription: String
/* Relationships */
@@ -95,11 +116,13 @@ public class AppPermission: NSManagedObject, Decodable, Fetchable {
usageDescription = try container.decode(String.self, forKey: .usageDescription)
let rawType = try container.decode(String.self, forKey: .type)
guard let type = ALTAppPermissionType(rawValue: rawType) else {
throw DecodingError.dataCorrupted(
DecodingError.Context(codingPath: [CodingKeys.type],
debugDescription: "Invalid value for `ALTAppPermissionType` \"\(rawType)\""))
}
// guard
let type = ALTAppPermissionType(rawValue: rawType)
// else {
// throw DecodingError.dataCorrupted(
// DecodingError.Context(codingPath: [CodingKeys.type],
// debugDescription: "Invalid value for `ALTAppPermissionType` \"\(rawType)\""))
// }
self.type = type
} catch {
if let context = managedObjectContext {

View File

@@ -27,8 +27,9 @@ public enum ALTAppPermissionType: Int, CaseIterable {
case faceID
case siri
case motion
case null
public init?(rawValue: String) {
public init(rawValue: String) {
switch rawValue {
case "photos": self = .photos
case "camera": self = .camera
@@ -47,7 +48,7 @@ public enum ALTAppPermissionType: Int, CaseIterable {
case "faceID", "faceid": self = .faceID
case "siri": self = .siri
case "motion": self = .motion
default: return nil
default: self = .null
}
}
@@ -87,6 +88,21 @@ public enum ALTAppPermissionType: Int, CaseIterable {
return "siri"
case .motion:
return "motion"
}
case .null:
return ""
}
}
}
@objc
public final class ALTAppPermissionTypeTransformer: ValueTransformer {
public override func transformedValue(_ value: Any?) -> Any? {
guard let enumValue = value as? ALTAppPermissionType else { return "" }
return enumValue.rawValue
}
public override func reverseTransformedValue(_ value: Any?) -> Any? {
guard let rawValue = value as? String else { return ALTAppPermissionType.null }
return ALTAppPermissionType(rawValue: rawValue)
}
}