swift - 使用 reduce() 将 String 转换为 Int

标签 swift type-conversion reduce

我有代码:

let number: String = "111 15 111"
let result = number.components(separatedBy: " ").map {Int($0)!}.reduce(0, {$0 + $1})

首先,它接受给定的字符串并将其拆分为数字数组。接下来将每个数字转换为整数,最后将所有数字相加。它工作正常,但代码有点长。所以我想到了在使用 reduce 的同时使用 map 函数并将 String 转换为 Int,如下所示:

let result = number.components(separatedBy: " ").reduce(0, {Int($0)! + Int($1)!})

输出是:

error: cannot invoke 'reduce' with an argument list of type '(Int, (String, String) -> Int)'

因此我的问题是:为什么在使用 reduce() 时无法将 String 转换为 Integer?

最佳答案

reduce 第二个参数是一个闭包,$0 是结果,$1 是字符串。而不是强制展开可选的默认值会更好。

let number: String = "111 15 111"
let result = number.components(separatedBy: " ").reduce(0, {$0 + (Int($1) ?? 0) })

另一种选择是使用 flatMap 和使用 + 运算符的 reduce

let result = number.components(separatedBy: " ").flatMap(Int.init).reduce(0, +)

关于swift - 使用 reduce() 将 String 转换为 Int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49477947/

相关文章:

r - (Rcpp, Armadillo ) 将 arma::vec 转换为 arma::mat

javascript - Underscore.js---_.contains和_.reduce的关系

javascript - 搜索对象数组(两个属性)以查找多个限制

loops - Clojure:使用 `for` 绑定(bind)构建集合

objective-c - XCode 7.3 破坏了 Bridging-Header.h?

arrays - 添加不同类型的数组

java - java中如何将Int转换为Int[]?

xcode - 使用自定义单元格在两个 UITableView 之间传递数据

swift - 如何在 swift 中实现 remove_if(从数组中删除标点符号)?

function - Go 是否支持函数的类型转换/类型转换?