泛型ExpressibleByStringLiteral字符串转换

时间:2017-01-16 02:32:40

标签: swift string generics

我想创建一个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)

但是我一直在使用这些参数没有初始化程序时遇到错误。这里出了什么问题?

1 个答案:

答案 0 :(得分:0)

我自己没有使用它,但从它的外观来看,我无法确定Self.StringLiteralType必须等于String的保证,因此你可以&#39;只需将String的实例传递给构造函数。

解决方案:将s投射到T.StringLiteralType