Вызовите функцию несколько раз и получите список результатов в Swift? - PullRequest
1 голос
/ 21 июня 2019

У меня есть функция func f() -> Int, и я хотел бы вызвать ее n: Int раз и получить список возвращаемых значений.

В ruby ​​вы бы сделали 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) }

1 Ответ

4 голосов
/ 21 июня 2019

Возможно, это не тот ответ, который вы ищете, но вы можете использовать Range s с функциями более высокого порядка.

Пример:

// 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) }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...