Swift类型转换错误:无法将[Character]转为[String]的问题求助
解决Swift中[Character]转[String]的类型不匹配问题
这问题我之前处理过,很典型的类型兼容问题,咱们一步步来搞定:
错误原因分析
你写的Array(allWords[0])会把字符串拆成[Character]类型的数组,但你的permute函数要求的参数是[String]。Swift里Character和String是完全不同的类型,编译器自然会抛出类型不匹配的错误。
解决方案:将Character转换为String
只需要把拆分出来的每个Character转换成String即可,有两种简洁的写法:
写法1:直接用map遍历字符串
var arrayOfLetters = allWords[0].map { String($0) }
直接遍历字符串的每个字符,把每个Character包装成String,最终得到[String]类型的数组。
写法2:先转成Character数组再map
如果你更习惯先转成数组的写法,也可以这样:
var arrayOfLetters = Array(allWords[0]).map { String($0) }
效果和上面完全一致,只是多了一步显式转成[Character]的操作。
修正后的完整代码
let allWords = ["Leopards"] // 转换为[String]类型的字母数组 var arrayOfLetters = allWords[0].map { String($0) } let everyPossibleArrangementOfLetters = permute(list: arrayOfLetters) func permute(list: [String], minStringLen: Int = 3) -> Set<String> { func permute(fromList: [String], toList: [String], minStringLen: Int, set: inout Set<String>) { // 生成符合最小长度要求的排列 if toList.count >= minStringLen { set.insert(toList.joined()) } // 递归生成所有排列 if !fromList.isEmpty { for i in 0..<fromList.count { var newFrom = fromList let element = newFrom.remove(at: i) var newTo = toList newTo.append(element) permute(fromList: newFrom, toList: newTo, minStringLen: minStringLen, set: &set) } } } var result = Set<String>() permute(fromList: list, toList: [], minStringLen: minStringLen, set: &result) return result }
这样修改后,arrayOfLetters的类型就和permute函数的参数要求完全匹配,编译器的错误就会消失啦。
内容的提问来源于stack exchange,提问作者Dominick
相关产品推荐
相关产品推荐

