swift - 泛型 ExpressibleByStringLiteral 字符串转换

标签 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(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/

相关文章:

java - 字符串分割函数不适用于该字符串

java - 在Java中处理字符串的最佳方式

c# - 使用仅在执行时已知的类型参数调用泛型方法

ios - 如何在xcode中为ios项目创建动态库?

SwiftUI,如何翻译带有计时器样式的文本?

ios - 来自 FBSDK xcode swift 的圆形 UIImage

受 IPV6 影响的 iOS 应用内购买非消耗品

c++ - 从函数返回字符串....限制?

c# - 对 Lazy<T> 单例代码的修改

java - 解析Java中的泛型函数