是否有 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,它实际上是 throws
和 rethrows
的机制,但这是另一个话题
您可以做的是创建自己的函数来扩展您需要的集合类型,例如 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.
考虑以下情况,我们有一个需要在 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,它实际上是 throws
和 rethrows
的机制,但这是另一个话题
您可以做的是创建自己的函数来扩展您需要的集合类型,例如 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.