首页 > 解决方案 > 多次调用函数并快速获取结果列表?

问题描述

我有一个函数func f() -> Int,我想调用它n: Int,并获取返回值列表。

在红宝石中,你会这样做n.times.collect { f }

swift 有类似的功能方法吗?

目前,我使用以下手工实现:

extension Int {
  func collect<T>(f: () -> T) -> [T] {
    var l: [T] = []
    for _ in 0..<self {
      l.append(f())
    }
    return l
  }
}


// Usage
let myList = 42.collect { UIView(frame: self.bounds) }

标签: swift

解决方案


这可能不是您要寻找的答案,但您可以将Ranges 与高阶函数一起使用。

例子:

// a range of 1 to 42
let range = (1...42) 
let views1 = range.map { _ in
    return UIView(frame: self.bounds)
}


// Shorthand
let views2 = (1...42).map { _ in UIView(frame: self.bounds) }

推荐阅读