如何将String.Element转换为Int?解决Swift字符串数字求和报错问题
问题解决:Swift遍历字符串提取连续数字求和
报错Cannot convert value of type 'String.Element' (aka 'Character') to expected argument type 'Int'的核心原因:遍历字符串得到的每一个元素都是Character字符类型,即使是数字形式的字符,也无法直接和Int类型的sum做加法运算,必须先完成类型转换。
除此之外你现有逻辑还有一个问题:逐字符判断的逻辑只会单独处理每个数字字符,无法识别连续的数字组合,比如30会被拆成3和0两个单独数字,最终求和结果为1+2+3+0+6+7=19,和你预期的100不符。
以下是完全适配你原有遍历思路的解决方案,没有引入额外复杂API:
var numsInStr = "1abc2x30yz67" var sum = 0 // 新增临时变量,存储当前正在拼接的连续数字字符串 var currentNumStr = "" for i in numsInStr { if i.isNumber { // 是数字就拼接到临时字符串中 currentNumStr.append(i) } else { // 不是数字就把临时存储的连续数字转成Int累加,随后清空临时变量 if let num = Int(currentNumStr) { sum += num } currentNumStr = "" } } // 遍历结束后处理末尾可能剩余的连续数字(比如示例中结尾的67) if let num = Int(currentNumStr) { sum += num } print(sum) // 输出结果为100,符合预期
如果你只需要提取所有单个数字字符求和(预期输出19的场景),可以在你原有代码基础上简化修改为:
var numsInStr = "1abc2x30yz67" var sum = 0 for i in numsInStr { // 直接将数字字符转换为对应的Int值 if let num = i.wholeNumberValue { sum += num } } print(sum) // 输出结果为19
内容的提问来源于stack exchange,提问作者BoB
相关产品推荐
相关产品推荐

