A lightweight library that helps to define ID types.
Requirements
Swift 5.4+
Features
What problems does SwiftIdentifier solve?
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.
The argument type of userIDHandler does not fully convey intent.
Solution with SwiftIdentifier
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!
Other features
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"
}
"""
Using SwiftIdentifier in your project
To use the SwiftIdentifier library in a SwiftPM project, add the following line to the dependencies in your Package.swift file:
SwiftIdentifier
A lightweight library that helps to define ID types.
Requirements
Features
What problems does SwiftIdentifier solve?
Suppose you have
UserandBooktypes, each of which has an ID of typeInt:and have a
userIDHandlerclosure:There are two main problems here.
userIDHandleraccepts a Book ID, leading to silent bugs.userIDHandlerdoes not fully convey intent.Solution with SwiftIdentifier
You can easily define different ID types for each type!
Other features
Codable.Using SwiftIdentifier in your project
To use the
SwiftIdentifierlibrary in a SwiftPM project, add the following line to the dependencies in yourPackage.swiftfile:and add
SwiftIdentifieras a dependency for your target:Finally, add
import SwiftIdentifierin your source code.