Перебирать функции в Swift - PullRequest
0 голосов
/ 31 мая 2019

Я чувствую себя немного глупо ... Я хочу избавиться от дублирования кода, поэтому мне нужно перебрать некоторые функции (пару из геометрических Дарвина).Но когда я пытаюсь

for function in [Darwin.acos, Darwin.cos, Darwin.sin] { print(function(1.0)) }

, я получаю ошибку «Неоднозначное использование« acos »».Я также попытался Darwin.acos(Double) и получил "Неоднозначную ссылку на члена 'acos'" и Darwin.acos { $0 } (и аналогичные) без какой-либо удачи.

Возможно ли это сделать?Спасибо!

Ответы [ 2 ]

2 голосов
/ 31 мая 2019

В дополнение к тому, что Султан сказал :

В будущей версии Swift эти функции также будут доступны как статические функции для типов с плавающей запятой, сравните SE-0246 GenericМатематические функции :

let functions = [Double.acos, Double.cos, Double.sin]
for function in functions { print(function(1.0)) }

Вы можете попробовать это сейчас с текущим снимком разработчика Swift из https://swift.org/download/#snapshots.

2 голосов
/ 31 мая 2019

Вы должны где-то указать тип:

let functions: [(Double) -> Double] = [Darwin.acos, Darwin.cos, Darwin.sin]
for function in functions { print(function(1.0)) }

, поскольку функции перегружены для разных типов с плавающей запятой:

public func acos(_: Float) -> Float
public func acos(_: Double) -> Double
public func acos(_: Float80) -> Float80
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...