是否有 void return 高阶函数?

Is there a void return higher-order function?

考虑以下情况,我们有一个需要在 class 中使用的值数组,但是我们不需要使用高阶函数从该数组输出。

例如假设我们有一个函数 func used(cells: [UITableViewCell.Type]) 我们需要在 UITableView 中注册这些单元格 我们可以很容易地使用 for-loop 但我正在尝试使用高阶函数来实现这一点,因为它的编写速度更快。

完整代码示例

func used(cells: [UITableViewCell.Type]){
        for cell in cells {
            self.register(cell)
        } // by foor loop
       _ = cells.map { self.register([=11=]) } // using map 
    }

如您所见,使用 .map 会给我一个 return 类型的 [T] 并且不声明变量名会给我一个

的编译器警告

Result of call to 'map' is unused

我想要的是不必编写 _ = 部分。

是否有我不知道的实际用于此目的的高阶函数?

先搞清楚什么是高阶函数

存在 swift 中的标准高阶函数来操作数据集合以对其进行修改,因此始终存在使用

等标准函数的 return 类型
  • 地图
  • 平面地图
  • 减少
  • 过滤器

无论是 T 还是 [T],它们总是会 return,它实际上是 throwsrethrows 的机制,但这是另一个话题

您可以做的是创建自己的函数来扩展您需要的集合类型,例如 array 代码类似于这样。

   extension Array {
    // T is the output type
    func voidlyMap<T>(_ transform: (Element) -> T)  {
        for item in self {
           _ = transform(item)
        }
    }
}

使用 transform(item) 将 return 当您以声明方式键入 [=18=] 时的值,因此使用它与 .map 相同,只是没有 return ,因此编译器没有警告只是直接使用它

用法:

let foo = ["foo1", "foo2", "foo3"]
foo.voidlyMap{ print([=11=])} // prints foo1 foo2 foo3

当然有这样的功能。它被称为forEach

该名称与其他函数式语言中的名称相同,例如Javascript.