WIP: Xcode 8 beta 6

This commit is contained in:
John Estropia
2016-09-06 09:57:28 +09:00
parent e9be711d4c
commit 0ba63c6e72
78 changed files with 472 additions and 450 deletions

View File

@@ -25,9 +25,6 @@
import Foundation
import CoreData
#if USE_FRAMEWORKS
import GCDKit
#endif
// MARK: - AsynchronousDataTransaction
@@ -42,7 +39,7 @@ public final class AsynchronousDataTransaction: BaseDataTransaction {
- parameter completion: the block executed after the save completes. Success or failure is reported by the `SaveResult` argument of the block.
*/
public func commit(_ completion: (result: SaveResult) -> Void = { _ in }) {
public func commit(_ completion: @escaping (_ result: SaveResult) -> Void = { _ in }) {
CoreStore.assert(
self.transactionQueue.isCurrentExecutionContext(),
@@ -54,12 +51,12 @@ public final class AsynchronousDataTransaction: BaseDataTransaction {
)
self.isCommitted = true
let group = GCDGroup()
let group = DispatchGroup()
group.enter()
self.context.saveAsynchronouslyWithCompletion { (result) -> Void in
self.result = result
completion(result: result)
completion(result)
group.leave()
}
group.wait()
@@ -72,7 +69,7 @@ public final class AsynchronousDataTransaction: BaseDataTransaction {
- returns: a `SaveResult` value indicating success or failure, or `nil` if the transaction was not comitted synchronously
*/
@discardableResult
public func beginSynchronous(_ closure: (transaction: SynchronousDataTransaction) -> Void) -> SaveResult? {
public func beginSynchronous(_ closure: (_ transaction: SynchronousDataTransaction) -> Void) -> SaveResult? {
CoreStore.assert(
self.transactionQueue.isCurrentExecutionContext(),
@@ -178,7 +175,7 @@ public final class AsynchronousDataTransaction: BaseDataTransaction {
- parameter objects: the `NSManagedObject`s type to be deleted
*/
public override func delete<S: Sequence where S.Iterator.Element: NSManagedObject>(_ objects: S) {
public override func delete<S: Sequence>(_ objects: S) where S.Iterator.Element: NSManagedObject {
CoreStore.assert(
!self.isCommitted,
@@ -191,7 +188,7 @@ public final class AsynchronousDataTransaction: BaseDataTransaction {
// MARK: Internal
internal init(mainContext: NSManagedObjectContext, queue: GCDQueue, closure: (transaction: AsynchronousDataTransaction) -> Void) {
internal init(mainContext: NSManagedObjectContext, queue: DispatchQueue, closure: (_ transaction: AsynchronousDataTransaction) -> Void) {
self.closure = closure
@@ -233,5 +230,5 @@ public final class AsynchronousDataTransaction: BaseDataTransaction {
// MARK: Private
private let closure: (transaction: AsynchronousDataTransaction) -> Void
private let closure: (_ transaction: AsynchronousDataTransaction) -> Void
}

View File

@@ -25,9 +25,6 @@
import Foundation
import CoreData
#if USE_FRAMEWORKS
import GCDKit
#endif
// MARK: - BaseDataTransaction
@@ -87,7 +84,7 @@ public /*abstract*/ class BaseDataTransaction {
switch context.parentStack!.persistentStoreForEntityClass(
entityClass,
configuration: into.configuration
?? into.dynamicType.defaultConfigurationName,
?? type(of: into).defaultConfigurationName,
inferStoreIfPossible: false
) {
@@ -187,7 +184,7 @@ public /*abstract*/ class BaseDataTransaction {
- parameter objects: the `NSManagedObject`s to be deleted
*/
public func delete<S: Sequence where S.Iterator.Element: NSManagedObject>(_ objects: S) {
public func delete<S: Sequence>(_ objects: S) where S.Iterator.Element: NSManagedObject {
CoreStore.assert(
self.isRunningInAllowedQueue(),
@@ -453,8 +450,8 @@ public /*abstract*/ class BaseDataTransaction {
// MARK: Internal
internal let context: NSManagedObjectContext
internal let transactionQueue: GCDQueue
internal let childTransactionQueue = GCDQueue.createSerial("com.corestore.datastack.childtransactionqueue")
internal let transactionQueue: DispatchQueue
internal let childTransactionQueue = DispatchQueue(serialWith: "com.corestore.datastack.childtransactionqueue")
internal let supportsUndo: Bool
internal let bypassesQueueing: Bool
@@ -462,7 +459,7 @@ public /*abstract*/ class BaseDataTransaction {
internal var isCommitted = false
internal var result: SaveResult?
internal init(mainContext: NSManagedObjectContext, queue: GCDQueue, supportsUndo: Bool, bypassesQueueing: Bool) {
internal init(mainContext: NSManagedObjectContext, queue: DispatchQueue, supportsUndo: Bool, bypassesQueueing: Bool) {
let context = mainContext.temporaryContextInTransactionWithConcurrencyType(
queue == .main

View File

@@ -35,7 +35,7 @@ public extension CoreStore {
- parameter closure: the block where creates, updates, and deletes can be made to the transaction. Transaction blocks are executed serially in a background queue, and all changes are made from a concurrent `NSManagedObjectContext`.
*/
public static func beginAsynchronous(_ closure: (transaction: AsynchronousDataTransaction) -> Void) {
public static func beginAsynchronous(_ closure: (_ transaction: AsynchronousDataTransaction) -> Void) {
self.defaultStack.beginAsynchronous(closure)
}
@@ -47,7 +47,7 @@ public extension CoreStore {
- returns: a `SaveResult` value indicating success or failure, or `nil` if the transaction was not comitted synchronously
*/
@discardableResult
public static func beginSynchronous(_ closure: (transaction: SynchronousDataTransaction) -> Void) -> SaveResult? {
public static func beginSynchronous(_ closure: (_ transaction: SynchronousDataTransaction) -> Void) -> SaveResult? {
return self.defaultStack.beginSynchronous(closure)
}

View File

@@ -25,9 +25,6 @@
import Foundation
import CoreData
#if USE_FRAMEWORKS
import GCDKit
#endif
// MARK: - DataStack
@@ -39,7 +36,7 @@ public extension DataStack {
- parameter closure: the block where creates, updates, and deletes can be made to the transaction. Transaction blocks are executed serially in a background queue, and all changes are made from a concurrent `NSManagedObjectContext`.
*/
public func beginAsynchronous(_ closure: (transaction: AsynchronousDataTransaction) -> Void) {
public func beginAsynchronous(_ closure: (_ transaction: AsynchronousDataTransaction) -> Void) {
AsynchronousDataTransaction(
mainContext: self.rootSavingContext,
@@ -54,7 +51,7 @@ public extension DataStack {
- returns: a `SaveResult` value indicating success or failure, or `nil` if the transaction was not comitted synchronously
*/
@discardableResult
public func beginSynchronous(_ closure: (transaction: SynchronousDataTransaction) -> Void) -> SaveResult? {
public func beginSynchronous(_ closure: (_ transaction: SynchronousDataTransaction) -> Void) -> SaveResult? {
return SynchronousDataTransaction(
mainContext: self.rootSavingContext,

View File

@@ -70,6 +70,19 @@ public enum SaveResult: Hashable {
case failure(CoreStoreError)
/**
Returns `true` if the result indicates `.success`, `false` if the result is `.failure`.
*/
public var boolValue: Bool {
switch self {
case .success: return true
case .failure: return false
}
}
// MARK: Hashable
public var hashValue: Int {
@@ -99,21 +112,6 @@ public enum SaveResult: Hashable {
}
// MARK: - SaveResult: BooleanType
extension SaveResult: Boolean {
public var boolValue: Bool {
switch self {
case .success: return true
case .failure: return false
}
}
}
// MARK: - SaveResult: Equatable
public func == (lhs: SaveResult, rhs: SaveResult) -> Bool {

View File

@@ -25,9 +25,6 @@
import Foundation
import CoreData
#if USE_FRAMEWORKS
import GCDKit
#endif
// MARK: - SynchronousDataTransaction
@@ -67,7 +64,7 @@ public final class SynchronousDataTransaction: BaseDataTransaction {
- returns: a `SaveResult` value indicating success or failure, or `nil` if the transaction was not comitted synchronously
*/
@discardableResult
public func beginSynchronous(_ closure: (transaction: SynchronousDataTransaction) -> Void) -> SaveResult? {
public func beginSynchronous(_ closure: (_ transaction: SynchronousDataTransaction) -> Void) -> SaveResult? {
CoreStore.assert(
self.transactionQueue.isCurrentExecutionContext(),
@@ -173,7 +170,7 @@ public final class SynchronousDataTransaction: BaseDataTransaction {
- parameter objects: the `NSManagedObject`s to be deleted
*/
public override func delete<S: Sequence where S.Iterator.Element: NSManagedObject>(_ objects: S) {
public override func delete<S: Sequence>(_ objects: S) where S.Iterator.Element: NSManagedObject {
CoreStore.assert(
!self.isCommitted,
@@ -186,7 +183,7 @@ public final class SynchronousDataTransaction: BaseDataTransaction {
// MARK: Internal
internal init(mainContext: NSManagedObjectContext, queue: GCDQueue, closure: (transaction: SynchronousDataTransaction) -> Void) {
internal init(mainContext: NSManagedObjectContext, queue: DispatchQueue, closure: (_ transaction: SynchronousDataTransaction) -> Void) {
self.closure = closure
@@ -213,5 +210,5 @@ public final class SynchronousDataTransaction: BaseDataTransaction {
// MARK: Private
private let closure: (transaction: SynchronousDataTransaction) -> Void
private let closure: (_ transaction: SynchronousDataTransaction) -> Void
}

View File

@@ -25,9 +25,6 @@
import Foundation
import CoreData
#if USE_FRAMEWORKS
import GCDKit
#endif
// MARK: - UnsafeDataTransaction
@@ -42,12 +39,12 @@ public final class UnsafeDataTransaction: BaseDataTransaction {
- parameter completion: the block executed after the save completes. Success or failure is reported by the `SaveResult` argument of the block.
*/
public func commit(_ completion: (result: SaveResult) -> Void) {
public func commit(_ completion: @escaping (_ result: SaveResult) -> Void) {
self.context.saveAsynchronouslyWithCompletion { (result) -> Void in
self.result = result
completion(result: result)
completion(result)
}
}
@@ -105,7 +102,7 @@ public final class UnsafeDataTransaction: BaseDataTransaction {
- parameter closure: the closure where changes can be made prior to the flush
- throws: an error thrown from `closure`, or an error thrown by Core Data (usually validation errors or conflict errors)
*/
public func flush(closure: @noescape () throws -> Void) rethrows {
public func flush(closure: () throws -> Void) rethrows {
try closure()
self.context.processPendingChanges()
@@ -153,7 +150,7 @@ public final class UnsafeDataTransaction: BaseDataTransaction {
// MARK: Internal
internal init(mainContext: NSManagedObjectContext, queue: GCDQueue, supportsUndo: Bool) {
internal init(mainContext: NSManagedObjectContext, queue: DispatchQueue, supportsUndo: Bool) {
super.init(mainContext: mainContext, queue: queue, supportsUndo: supportsUndo, bypassesQueueing: true)
}