目录
目录README.md

SwiftIdentifier

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:

.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.

关于
50.0 KB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

©Copyright 2023 CCF 开源发展委员会
Powered by Trustie& IntelliDE 京ICP备13000930号