swift ExpressibleByStringLiteralの使い所

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了swift ExpressibleByStringLiteralの使い所相关的知识,希望对你有一定的参考价值。

// 今回は、StringLiteralTypeは、String型でしか使用しないため独自Protocolを定義
protocol CustomExpressibleByStringLiteral: ExpressibleByStringLiteral where StringLiteralType == String {
    init(stringLiteral value: Self.StringLiteralType)
}

// UserのIdを表す型
struct UserId {
    let value: String
}

// ExpressibleByStringLiteralに準拠
extension UserId: CustomExpressibleByStringLiteral {
    public init(stringLiteral value: StringLiteralType) {
        self = UserId(value: value)
    }
}

// UserのNameを表す型
struct UserName {
    let value: String
}

extension UserName: CustomExpressibleByStringLiteral {
    public init(stringLiteral value: StringLiteralType) {
        self = UserName(value: value)
    }
}

// どちらもString型だけど、違う型として定義することで、引数などへの入れ間違いを型レベルで禁止できる
struct User {
    let id: UserId
    let name: UserName
}

/*
 * Usage
 */
func fetch(userId: UserId) {
    print("value: \(userId.value)")
}

// ExpressibleByStringLiteralに準拠しているため、idとnameの初期化が簡単にできる
let user = User(id: "abc", name: "tarou")
// 引数をUserId型にしているため、idとnameの入れ間違いが発生しない
fetch(userId: user.id)
//fetch(userId: user.userName) // コンパイルエラー


以上是关于swift ExpressibleByStringLiteralの使い所的主要内容,如果未能解决你的问题,请参考以下文章

Swift入门系列--Swift官方文档(2.2)--中文翻译--About Swift 关于Swift

swift 示例BS swift.swift

swift swift_bug.swift

ios 整理(一)swift和oc的区别

swift swift_extension5.swift

swift swift_optional4.swift