无法使用“(String, (String) -> String)”类型的参数列表调用 'reduce'
Cannot invoke 'reduce' with an argument list of type '(String, (String) -> String)'
我正在尝试将 Swift 3 转换为 Swift 4 以获得 github 上的 repo。这是一个阻止我的功能。
func times(_ n: Int) -> String {
return (0..<n).reduce("") { [=11=] + self }
}
Xcode给出的错误是:
"Cannot invoke 'reduce' with an argument list of type '(String, (String) -> String)'"
我查看了 Apple 的官方页面,发现 reduce(_:_:)
and reduce(into:_:)
, and someone's 。已经尝试了下面的代码,但我仍然无法让它工作。请指出我遗漏的内容。
return (0..<n).character.reduce("") { string, character in
(0..<n) + self }
return (0..<n).character.reduce("") { [=12=] + self }
这里的[=15=]
指的是闭包的第一个参数(我认为)。然后我们可以 self 属性 在它自己的实例方法中引用当前实例。
答案取决于你要做什么。很难弄清楚 reduce 到底做了什么,但是你必须明白这个函数的要点是需要将数组 reduce 为一个变量。
看例子:
let items = ["one", "two", "three"]
let final = items.reduce("initial") { text, item in "\(text), \(item)" }
print(final) // initial, one, two, three
在闭包中 text
是一个累积字符串。初始值设置为参数。 "initial"
在我们的例子中。在第一次迭代中,文本将是 initial, one
。第二个:initial, one, two
。等等。那是因为我们设置了一个规则如何减少数组:"\(text), \(item)"
在你的例子中:
func times(_ n: Int) -> String {
return (0..<n).reduce("") { [=11=] + self }
}
- 首先我们通过这个
(0..<n)
创建一个包含 n 项的数组:[0, 1, 2, 3, 4..]
- 然后我们设置一个初始值作为一个空字符串。
- 下一个不知道你需要什么
也许您需要一个结果字符串 0123456789..
,然后有一个代码:
let reduced = (0..<n).reduce("") { text, value in text + "\(value)" }
希望对你有所帮助=)
您的闭包将接收两个参数,而您只使用一个 ($0)。你可以在闭包中使用 $0.0 或者简单地使用字符串构造函数来做同样的事情而不减少:
func times(_ n: Int) -> String
{ return String(repeating:self, count:n) }
或者,如果你想像乘法一样使用Python来重复一个字符串,你可以添加一个运算符:
extension String
{
static func *(lhs:String,rhs:Int) -> String
{ return String(repeating:lhs, count:rhs) }
}
// then, the following will work nicely:
"blah " * 10 // ==> "blah blah blah blah blah blah blah blah blah blah "
我正在尝试将 Swift 3 转换为 Swift 4 以获得 github 上的 repo。这是一个阻止我的功能。
func times(_ n: Int) -> String {
return (0..<n).reduce("") { [=11=] + self }
}
Xcode给出的错误是:
"Cannot invoke 'reduce' with an argument list of type '(String, (String) -> String)'"
我查看了 Apple 的官方页面,发现 reduce(_:_:)
and reduce(into:_:)
, and someone's
return (0..<n).character.reduce("") { string, character in
(0..<n) + self }
return (0..<n).character.reduce("") { [=12=] + self }
这里的[=15=]
指的是闭包的第一个参数(我认为)。然后我们可以 self 属性 在它自己的实例方法中引用当前实例。
答案取决于你要做什么。很难弄清楚 reduce 到底做了什么,但是你必须明白这个函数的要点是需要将数组 reduce 为一个变量。
看例子:
let items = ["one", "two", "three"]
let final = items.reduce("initial") { text, item in "\(text), \(item)" }
print(final) // initial, one, two, three
在闭包中 text
是一个累积字符串。初始值设置为参数。 "initial"
在我们的例子中。在第一次迭代中,文本将是 initial, one
。第二个:initial, one, two
。等等。那是因为我们设置了一个规则如何减少数组:"\(text), \(item)"
在你的例子中:
func times(_ n: Int) -> String {
return (0..<n).reduce("") { [=11=] + self }
}
- 首先我们通过这个
(0..<n)
创建一个包含 n 项的数组:[0, 1, 2, 3, 4..] - 然后我们设置一个初始值作为一个空字符串。
- 下一个不知道你需要什么
也许您需要一个结果字符串 0123456789..
,然后有一个代码:
let reduced = (0..<n).reduce("") { text, value in text + "\(value)" }
希望对你有所帮助=)
您的闭包将接收两个参数,而您只使用一个 ($0)。你可以在闭包中使用 $0.0 或者简单地使用字符串构造函数来做同样的事情而不减少:
func times(_ n: Int) -> String
{ return String(repeating:self, count:n) }
或者,如果你想像乘法一样使用Python来重复一个字符串,你可以添加一个运算符:
extension String
{
static func *(lhs:String,rhs:Int) -> String
{ return String(repeating:lhs, count:rhs) }
}
// then, the following will work nicely:
"blah " * 10 // ==> "blah blah blah blah blah blah blah blah blah blah "