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