我是新来的地图还原和想玩它一点。我希望这个问题不要太愚蠢。
我有这个代码:
var str = "Geometry add to map: "
for element in geometryToAdd {
str.append(element.toString())
}
print(str)
现在我想玩地图还原,因为我最近学会了。我重写如下:
print(geometryToAdd.reduce("Geometry add to map: ", {$0.append($1.toString())}))
这给了我一个错误
error: MyPlayground.playground:127:57: error: type of expression is ambiguous without more context
。我做错什么了?var geometryToAdd: Array<Geometry> = []
类有一个功能。
谢谢你的帮助。
最佳答案
有两种类似的方法:
func reduce<Result>(_ initialResult: Result, _ nextPartialResult: (Result, Element) throws -> Result) rethrows -> Result
func reduce<Result>(into initialResult: Result, _ updateAccumulatingResult: (inout Result, Element) throws -> ()) rethrows -> Result
您使用的是第一个版本,其中
$0
是不可变的,并且闭包必须返回累积值。这不会编译,因为
append()
修改其接收器。使用第二个版本可以编译:这里
$0
是可变的闭包用累积值更新
$0
。print(geometryToAdd.reduce(into: "Geometry add to map: ", {$0.append($1.toString())}))
关于swift - 循环有效,尝试减少映射时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50177733/