gpt4 book ai didi

Swift 的映射函数

转载 作者:可可西里 更新时间:2023-11-01 01:37:50 24 4
gpt4 key购买 nike

据我了解,Swift 的 map 函数执行以下操作:

  • 适用于任何采用 SequenceType
  • 的东西
  • 想法是返回另一个“东西”(寻找更好的术语),它的元素通过您传递到闭包中的逻辑进行了转换
  • 总是返回仍然符合SequenceType的“东西”,并且元素的#没有改变

例如:

我们有两个类牛奶奶酪。我们得到了 Cheese 的构造函数,如下所示:

init(withMilk milk: Milk) {
self.milk = milk
}

给定一组 Milk 对象,我们将一组 Milk 对象转换为 Cheese 对象,如下所示:

let arrayOfCheese = arrayOfMilk.map { Cheese(withMilk: $0) }

这对我来说很好用。但现在我想要的不仅仅是普通的奶酪。我需要来自各地的食材:

let arrayOfSuperCheese = arrayOfMilk.map { 
let cheese = Cheese(usingMilk: $0)
let sulfur = Sulfur()
let minerals = Minerals()
let mixer = Mixer()

let superCheese = mixer.mixIn(sulphur: sulphur, minerals: minerals)
return superCheese
}

编译器告诉我:

无法使用类型为“(@noescape (Element) throws -> _)”的参数列表调用“map”

上面的例子大致就是我目前遇到的问题。请让我知道该示例是否有意义。

最佳答案

这非常复杂,无法合理推断闭包签名。所以指定它:

let arrayOfSuperCheese = arrayOfMilk.map { (milk: Milk) -> Cheese in
let cheese = Cheese(usingMilk: milk)
let sulfur = Sulfur()
let minerals = Minerals()
let mixer = Mixer()

let superCheese = mixer.mixIn(sulfur: sulfur, minerals: minerals)
return superCheese
}

关于Swift 的映射函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34054779/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com