Swift: воспроизведение для каждого, просмотр исходного кода? - PullRequest
1 голос
/ 06 января 2020

В настоящее время я изучаю замыкания и думаю, что они у меня есть, но я заинтересован в воспроизведении метода forEach для массива. Я хотел бы посмотреть, как это делается. В xcode я вижу декларацию, которая показывает

    @inlinable public func forEach(_ body: (Element) throws -> Void) rethrows

, но я действительно хочу увидеть код на самом деле.

Например, следующий

var items = [1,2,3]
items.forEach { (item) in
    print(item)
}

I меня интересует, как у замыкания есть доступ к (item), как forEach предоставляет эту информацию.

Закрытие - это мой код, и оно получает первую переменную, которую я назвал "item", конечно, она работает, но я хотел бы знать, как.

Если я хотел создать новую версию forEach, давайте назовем ее для forEachNew, тогда как мне это сделать.

Является ли forEach расширением для указанного c тип / протокол?

Любая помощь действительно ценится.

Спасибо

1 Ответ

3 голосов
/ 06 января 2020

Вы можете проверить текущую реализацию Sequence.forEach на GitHub, поскольку Swift является открытым исходным кодом.

Текущая реализация просто использует for ... in l oop для итерации по Sequence, а затем выполняет закрытие body для каждого элемента.

@inlinable
  public func forEach(
    _ body: (Element) throws -> Void
  ) rethrows {
    for element in self {
      try body(element)
    }
  }
}
...