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
User
andBook
types, each of which has an ID of typeInt
:and have a
userIDHandler
closure:There are two main problems here.
userIDHandler
accepts a Book ID, leading to silent bugs.userIDHandler
does 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
SwiftIdentifier
library in a SwiftPM project, add the following line to the dependencies in yourPackage.swift
file:and add
SwiftIdentifier
as a dependency for your target:Finally, add
import SwiftIdentifier
in your source code.