Skip to content

Instantly share code, notes, and snippets.

@oliverepper
oliverepper / persistentContainer.swift
Created February 20, 2020 08:55
persistentContainerWithName
lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "DemoApp")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
}()
@oliverepper
oliverepper / persistenContainerWithObjectModel.swift
Created February 20, 2020 09:15
persistentContainerWithObjectModel
lazy var persistentContainer: NSPersistentContainer = {
let modelName = "MyDataModel"
guard let modelDir = Bundle(for: type(of: self)).url(forResource: modelName, withExtension: "momd") else { fatalError() }
guard let mom = NSManagedObjectModel(contentsOf: modelDir) else { fatalError() }
let container = NSPersistentContainer(name: modelName, managedObjectModel: mom)
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
@oliverepper
oliverepper / CodableFileBuffer.swift
Created February 21, 2020 15:17
CodableFileBuffer
//
// CodableFileBuffer.swift
//
// Created by Oliver Epper on 26.12.19.
// Copyright © 2020 Oliver Epper. All rights reserved.
//
import Foundation
import os.log
public func append(_ codable: T) {
// encode codable
guard let data = try? encoder.encode(codable) else {
fatalError("Cannot encode \(codable)")
}
// write to FileHandle
fileHandle.write(data)
fileHandle.write(",".data(using: .utf8)!)
@oliverepper
oliverepper / buffer.json.txt
Created February 21, 2020 17:06
CodableFileBuffer_example.json.txt
// after initializing
[
// after writing the first codable
[{"id":1, "key": "value_one"},
// after writing the second codable
[{"id":1, "key": "value_one"},{"id":2, "key": "another_value"},
// the data that gets passed to the JSONDecoder looks like this
@oliverepper
oliverepper / CodableFileBufferExample.swift
Created February 21, 2020 17:21
CodableFileBufferExample
struct MyCodable: Codable {
var id: Int
var key: String
}
let buffer = CodableFileBuffer<MyCodable>()
buffer.append(MyCodable(id: 1, key: "value_one"))
buffer.append(MyCodable(id: 2, key: "another_value"))
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>FILEHEADER</key>
<string>
// Created by ___FULLUSERNAME___ on ___DATE___.
// ___COPYRIGHT___
//</string>
</dict>
@oliverepper
oliverepper / LineReader
Created February 6, 2021 10:53
LineReader
public struct LineReader {
enum Error: Swift.Error {
case cannotOpenFile(URL)
}
private let subject = PassthroughSubject<String, LineReader.Error>()
var linePublisher: AnyPublisher<String, LineReader.Error> {
subject.eraseToAnyPublisher()
}
@oliverepper
oliverepper / LinePublisher.swift
Last active February 14, 2021 09:29
LinePublisher
import Foundation
import Combine
class LinePublisherSubscription<S: Subscriber>: Subscription where S.Input == String, S.Failure == LinePublisher.Error {
let url: URL
let linesToRead: Int?
var subscriber: S?
var openDemand = Subscribers.Demand.none
@oliverepper
oliverepper / ReadOperation.swift
Last active February 20, 2021 09:21
ReadOperation
//
// Created by Oliver Epper on 16.02.21.
//
//
import Combine
import Foundation
final class ReadOperation: Operation {
enum ReadOperationError: Error {