CoreDataStorage 1.1.0

CoreDataStorage 1.1.0

JeonhuiLee 维护。



  • Jeonhui

CoreDataStorage

Version Platform License

使用 Combine 改善 CoreData

要求

iOSVersion SwiftVersion

使用与示例

连接

// Example Struct
struct Movie {
    let id: String
    let title: String
    let releaseDate: Date
    let desc: String
}

// Struct connect Entity
extension Movie: Entitable {
    // Create toEntity Function
    func toEntity(in context: NSManagedObjectContext) -> MovieEntity {
        let entity: MovieEntity = .init(context: context)
        entity.id = id
        entity.title = title
        entity.releaseDate = releaseDate
        entity.desc = desc
        return entity
    }
}

// Entity connect Struct
extension MovieEntity: Objectable {
    // Create toObject Function
    public func toObject() -> some Entitable {
        return Movie(id: id ?? UUID().uuidString,
                title: title ?? "unknown",
                releaseDate: releaseDate ?? Date(),
                desc: desc ?? "")
    }
}

CoreData存储

let coreDataStorage = CoreDataStorage.shared(name: "Storage Name")

// CoreDataStorage Function
func create<O>(_ value: O) -> AnyPublisher<O, Error> where O: Entitable
func read<O: Entitable>(type: O.Type, predicate: NSPredicate? = nil, sortDescriptors: [NSSortDescriptor]? = nil) -> AnyPublisher<[O], Error>
func update<O: Entitable>(_ updateObject: O, predicate: NSPredicate, limit: Int? = nil) -> AnyPublisher<[O], Error>
func update<O: Entitable>(type: O.Type, updateValues: [String: Any], predicate: NSPredicate) -> AnyPublisher<[O], Error>
func delete<O: Entitable>(_ type: O.Type, predicate: NSPredicate, limit: Int? = nil) -> AnyPublisher<[O], Error>
func deleteAll<O: Entitable>(_ type: O.Type) -> AnyPublisher<Bool, Error>

创建

// MARK: - Functions
func create<O>(_ value: O) -> AnyPublisher<O, Error> where O: Entitable
    
// MARK: - Example
func createMovie(movie: Movie) -> AnyPublisher<Movie, Error> {
  return CoreDataStorage.shared(name: "MovieStorage").create(movie)
}

读取

// MARK: - Functions
func read<O: Entitable>(type: O.Type, predicate: NSPredicate? = nil, sortDescriptors: [NSSortDescriptor]? = nil) -> AnyPublisher<[O], Error>

// MARK: - Example
func readMovie(id: String) -> AnyPublisher<[Movie], Error> {
  let predicate = NSPredicate(format: "id = %@", "\(id)")
  return CoreDataStorage.shared(name: "MovieStorage").read(type: Movie.self, predicate: predicate)
}

func readAllMovie() -> AnyPublisher<[Movie], Error> {
  return CoreDataStorage.shared(name: "MovieStorage").read(type: Movie.self)
}

更新

// MARK: - Functions
func update<O: Entitable>(_ updateObject: O, predicate: NSPredicate, limit: Int? = nil) -> AnyPublisher<[O], Error>
func update<O: Entitable>(type: O.Type, updateValues: [String: Any], predicate: NSPredicate) -> AnyPublisher<[O], Error>
 
// MARK: - Example
func updateMovie(movie: Movie) -> AnyPublisher<[Movie], Error> {
  let predicate = NSPredicate(format: "id = %@", "\(movie.id)")
  return CoreDataStorage.shared(name: "MovieStorage").update(movie, predicate: predicate)
}

func updateMovie(id: String) -> AnyPublisher<[Movie], Error> {
  let predicate = NSPredicate(format: "id = %@", "\(movie.id)")
  return CoreDataStorage.shared(name: "MovieStorage").update(Movie.self, updateValues: [title: "unknown"], predicate: predicate)
}

删除

// MARK: - Functions
func delete<O: Entitable>(_ type: O.Type, predicate: NSPredicate, limit: Int? = nil) -> AnyPublisher<[O], Error> 
func deleteAll<O: Entitable>(_ type: O.Type) -> AnyPublisher<Bool, Error>

// MARK: - Example
func deleteMovie(id: String) -> AnyPublisher<[Movie], Error> {
  let predicate = NSPredicate(format: "id = %@", "\(id)")
  return CoreDataStorage.shared(name: "MovieStorage").delete(Movie.self, predicate: predicate)
}

func deleteAllMovies(movie: Movie) -> AnyPublisher<Bool, Error> {
  return CoreDataStorage.shared(name: "MovieStorage").deleteAll(Movie.self)
}

Swift包管理器

https://github.com/Jeonhui/CoreDataStorage

CocoaPods

CoreDataStorage可以通过CocoaPods获取。要安装它,只需将以下行添加到您的Podfile中

pod 'CoreDataStorage'

作者

Jeonhui, [邮箱地址隐藏]

许可协议

CoreDataStorage 可在 MIT 许可下使用。有关更多信息,请参阅 LICENSE 文件。