我想创建 String
的扩展,它将类型 T
作为输入并创建该类型 的
,其中字符串通过 Array
TString
作为输入分隔为多个组件:
extension String {
func convertToArrayOfTypesWithSeperator<T: ExpressibleByStringLiteral>(type : T.Type, seperator: String) -> [T] {
var res : [T] = []
self.components(separatedBy: seperator).forEach { s in
// Cast to Type
// Add to res
}
return res
}
}
现在我知道 T
必须符合 ExpressibleByStringLiteral
,即 docs状态应该有一个初始化:
init(stringLiteral value: Self.StringLiteralType)
所以我尝试将我的字符串组件 s
转换为我作为输入传递的类型:
let t = type.init(stringLiteral: s)
但是我不断收到有关它没有使用这些参数的初始化程序的错误。这里出了什么问题?
最佳答案
我自己没有使用过它,但从它的外观来看,我看不出有什么保证 Self.StringLiteralType
必须等于 String
,因此你不能只将 String
实例传递给构造函数。
解决方案:将 s
转换为 T.StringLiteralType
关于swift - 泛型 ExpressibleByStringLiteral 字符串转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41668657/