【发布时间】:2016-08-13 05:56:33
【问题描述】:
我正在尝试构建一个可以从字符串初始化的通用结构。
小例子:
struct Example<T> {
var data: T
init(fromString string: String) {
data = T(string)
}
}
这自然会失败,因为我们必须确保 T 可以是来自 String 的 init()。
我找不到这个协议,所以我尝试创建它:
protocol InitializableWithString { init?(_: String) }
struct Example<T: InitializableWithString> { ... }
但尝试使用 Int 会给出:
let testVar = Example<Int>(fromString: "12")
错误:类型“Int”不符合协议“InitializableWithString”
但是 Ints 确实有一个带有 String 参数的可失败初始化器。
> let intFromString = Int("12")
intFromString: Int? = 12
有没有办法完成我在这里尝试做的事情?
【问题讨论】:
-
可能不是你要找的,但是有一个可以用字符串 literals 初始化的类型的协议:
StringLiteralConvertible(Swift 3 中的ExpressibleByStringLiteral) .