一个轻量级的库,帮助定义 ID 类型。
假设您有 User
和 Book
类型,它们都有一个 Int
类型的 ID
struct User {
let id: Int
}
struct Book {
let id: Int
}
并且有一个 userIDHandler
闭包
let userIDHandler: (Int) -> Void = { ... }
这里有两个主要问题。
userIDHandler
接受一个 Book ID,这会导致静默错误。userIDHandler
的参数类型不能完全表达意图。您可以轻松地为**每种类型定义不同的 ID 类型**!
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!
您可以与 Codable
很好地协作。
struct User: Codable {
typealias ID = Identifier<Self, Int>
let id: ID
let name: String
}
// Compatible JSON
"""
{
"id": 100,
"name": "John"
}
"""
要在 SwiftPM 项目中使用 SwiftIdentifier
库,请将以下行添加到 Package.swift
文件中的依赖项
.package(url: "https://github.com/jrsaruo/SwiftIdentifier", from: "1.1.2"),
并将 SwiftIdentifier
添加为目标的依赖项
.target(name: "<target>", dependencies: [
.product(name: "SwiftIdentifier", package: "SwiftIdentifier"),
// other dependencies
]),
最后,在您的源代码中添加 import SwiftIdentifier
。