我想創建一個擴展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