我正在尝试通过 reduce 函数连接 String 数组的元素。现在尝试了一下,但我不知道问题到底是什么。这就是我认为应该做的事情。我也尝试过其他替代方案,但鉴于数量巨大,我将等待一些输入:
var genres = ["towel", "42"]
var jointGenres : String = genres.reduce(0, combine: { $0 + "," + $1 })
错误:
..:14:44: Cannot invoke '+' with an argument list of type '(IntegerLiteralConvertible, combine: (($T6, ($T6, $T7) -> ($T6, $T7) -> $T5) -> ($T6, ($T6, $T7) -> $T5) -> $T5, (($T6, $T7) -> ($T6, $T7) -> $T5, $T7) -> (($T6, $T7) -> $T5, $T7) -> $T5) -> (($T6, ($T6, $T7) -> $T5) -> $T5, (($T6, $T7) -> $T5, $T7) -> $T5) -> $T5)'
根据我的理解,$0 应该被推断为一个字符串,而 $1 与 $0 的组合也应该被推断为一个字符串。我不知道这里的类型系统有什么问题。有什么想法吗?
最佳答案
你的 reduce 闭包可能看起来像这样:
var jointGenres : String = genres.reduce("", combine: { $0 == "" ? $1 : $0 + "," + $1 })
这有 ""
而不是像你那样的 0
,并确保返回值的开头没有额外的逗号。
原始代码不起作用,因为在 documentation 中表示为 U 的返回类型在你的答案中最初是 0,而你正试图向它添加一个字符串。在您的情况下,您真的希望 U 和 T 都代表字符串而不是整数。
关于swift - 字符串数组减少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25951739/