我想创建一个String
的扩展名,其类型为T
作为输入,并创建该Array
类型的T
,其中字符串分隔为组件输入String
:
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:
init(stringLiteral value: Self.StringLiteralType)
所以我尝试使用:
将我的字符串组件s
转换为我作为输入传递的类型
let t = type.init(stringLiteral: s)
但是我一直在使用这些参数没有初始化程序时遇到错误。这里出了什么问题?
答案 0 :(得分:0)
我自己没有使用它,但从它的外观来看,我无法确定Self.StringLiteralType
必须等于String
的保证,因此你可以&#39;只需将String
的实例传递给构造函数。
解决方案:将s
投射到T.StringLiteralType