Identifier
is a generic struct backed by a UUID, which can be specialized for the model type it identifies and provides unique, decentralized identity in a value type. It is Equatable, Hashable, Sendable, and Codable, serializing to a simple UUID string.
Instead of using string identifiers in your models:
struct Comment: Equatable, Codable {
let postID: String
let authorID: String
let text: String
let date: Date
}
You can use typed identifiers, which help ensure an ID for a model of one type is never accidentally used in place of another:
struct Comment: Equatable, Codable {
let postID: Identifier<Post>
let authorID: Identifier<User>
let text: String
let date: Date
}
Add the following line to the dependencies section of your package manifest:
.package(url: "https://github.com/mattrubin/Identifier.git", from: "1.1.0"),
Then add "Identifier"
to the dependencies array of any target which should be linked with this library.
Identifier is released under the MIT License.