我想创建一个扩展String
它接受一个类型T
作为输入,并通过一String
作为输入创建该类型T
以字符串分隔成部件的Array
:泛型ExpressibleByStringLiteral字符串转换
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)
但我不断收到关于有使用这些参数没有初始化它的错误。这里出了什么问题?
这是否真的值得的延伸? 's.components(separatedBy:“,”).map(SomeClass.init)' – Alexander
您应该使用功能映射算法,它使得事情更简单:'yourString.components(separatedBy:separator).map {YourType($ 0)} ' – Palle
但是如果你有比我目前写的更具体的要求。在这种情况下,不是关于结果,而是使用泛型实现它的方法。 – Emptyless