如何从数组生成字符串?适配Swift两种数组类型的解决方案
解决Swift中Character数组与String数组统一生成字符串的问题
问题根源
Array(interCity)生成的是[Character]类型数组,直接调用joined(separator:)会因方法匹配规则报错;而["E", "C"]是[String]类型,能正常调用该方法。要同时适配两种场景,需要统一处理逻辑。
两种可行解决方案
方案一:统一转为String数组后调用joined
不管原数组是[Character]还是[String],先将元素转为String类型,再执行拼接:
var interCity = "IC" var icLetters = Array(interCity) var ic = icLetters.map { String($0) }.joined(separator: "") // 生成"IC" var trainLetters = ["E", "C"] var ec = trainLetters.map { String($0) }.joined(separator: "") // 生成"EC"
方案二:写通用函数适配两种类型
针对[Character]用String初始化器直接转换(比joined更高效),针对[String]保留原joined逻辑,通过通用函数统一入口:
func joinToString<T>(_ elements: T, separator: String = "") -> String where T: Collection { if let chars = elements as? [Character] { return String(chars) } else if let strs = elements as? [String] { return strs.joined(separator: separator) } fatalError("不支持的集合类型") } // 调用示例 var interCity = "IC" var icLetters = Array(interCity) var ic = joinToString(icLetters) // "IC" var trainLetters = ["E", "C"] var ec = joinToString(trainLetters) // "EC"
额外说明
- 对于
[Character],String(icLetters)和joined(separator: "")效果完全一致,但前者是Swift原生优化的转换方式,性能更优。 - 通用函数可根据需求扩展,支持更多集合类型的拼接场景。
内容的提问来源于stack exchange,提问作者mairo
相关产品推荐
相关产品推荐

