A lightweight library that helps to define ID types.
Suppose you have User
and Book
types, each of which has an ID of type Int
:
struct User {
let id: Int
}
struct Book {
let id: Int
}
and have a userIDHandler
closure:
let userIDHandler: (Int) -> Void = { ... }
There are two main problems here.
userIDHandler
accepts a Book ID, leading to silent bugs.userIDHandler
does not fully convey intent.You can easily define different ID types for each type!
struct User {
typealias ID = Identifier<Self, Int>
let id: ID
}
struct Book {
typealias ID = Identifier<Self, Int>
let id: ID
}
let user = User(id: 10)
let book = Book(id: 500)
// The argument type become clearer!
let userIDHandler: (User.ID) -> Void = { ... }
userIDHandler(user.id) // OK
userIDHandler(book.id) // Compile error!
You can collaborate nicely with Codable
.
struct User: Codable {
typealias ID = Identifier<Self, Int>
let id: ID
let name: String
}
// Compatible JSON
"""
{
"id": 100,
"name": "John"
}
"""
To use the SwiftIdentifier
library in a SwiftPM project, add the following line to the dependencies in your Package.swift
file:
.package(url: "https://github.com/jrsaruo/SwiftIdentifier", from: "1.1.0"),
and add SwiftIdentifier
as a dependency for your target:
.target(name: "<target>", dependencies: [
.product(name: "SwiftIdentifier", package: "SwiftIdentifier"),
// other dependencies
]),
Finally, add import SwiftIdentifier
in your source code.
link |
Stars: 1 |
Last commit: 1 year ago |
Identifier
to conform to Sendable
by @jrsaruo in https://github.com/jrsaruo/SwiftIdentifier/pull/6Full Changelog: https://github.com/jrsaruo/SwiftIdentifier/compare/1.0.0...1.1.0
Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics