-
Notifications
You must be signed in to change notification settings - Fork 120
Expand file tree
/
Copy pathIdentifierStringConvertible.swift
More file actions
34 lines (28 loc) · 1.03 KB
/
Copy pathIdentifierStringConvertible.swift
File metadata and controls
34 lines (28 loc) · 1.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public import Foundation
/// A type that can be represented by a string identifier.
///
/// A requirement of tables synchronized to CloudKit using a ``SyncEngine``. You should generally
/// identify tables using Foundation's `UUID` type or another globally unique identifier. It is
/// not appropriate to conform simple integer types to this protocol.
public protocol IdentifierStringConvertible {
init?(rawIdentifier: String)
var rawIdentifier: String { get }
}
extension IdentifierStringConvertible where Self: CustomStringConvertible {
public var rawIdentifier: String { description }
}
extension IdentifierStringConvertible where Self: LosslessStringConvertible {
public init?(rawIdentifier: String) {
self.init(rawIdentifier)
}
}
extension String: IdentifierStringConvertible {}
extension Substring: IdentifierStringConvertible {}
extension UUID: IdentifierStringConvertible {
public init?(rawIdentifier: String) {
self.init(uuidString: rawIdentifier)
}
public var rawIdentifier: String {
description.lowercased()
}
}