У меня есть следующая функция, которая читает некоторые данные сердечного ритма и принимает функцию обратного вызова в виде закрытия, как таковой:Как необязательно передать значения закрытию в Swift?
func readHeartRate(callback: ((samples: [HKQuantitySample]?, average: Double?, error: NSError!) -> Void)!){
// ...
// ERROR - call the callback with no samples or average
callback(samples: nil, average: nil, error: error)
})
Прямо сейчас, я явно передавая обратно nil
для samples
и average
к Перезвони.
Однако, поскольку samples
и error
не являются обязательными, и так как я объявил имена в закрытии явно, я думал, что это было бы возможно, вместо этого:
callback(error: error)
Однако, когда я делаю это Xcode жалуется и броски ошибка:
Missing argument for parameter 'samples' in call
Есть ли способ вызвать обратный вызов только с необходимыми значениями, чтобы избежать загромождения кода?
«Эти параметры со значениями по умолчанию должны быть в конце списка аргументов». - это выполняется только для неназванных параметров, т. е. если вы назвали params, любой из них может иметь значение по умолчанию. –
Это больше для согласованности, чтобы поддерживать порядок аргументов одинаковым. «Поместите параметры со значениями по умолчанию в конце списка параметров функции. Это гарантирует, что все вызовы функции будут использовать один и тот же порядок для своих аргументов, отличных от параметров по умолчанию, и дадут понять, что в каждом случае вызывается одна и та же функция». - [Быстрый язык программирования] (https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html#//apple_ref/doc/uid/TP40014097-CH10-ID166) – gregheo
Вы правы, мне плохо. Я принял его за императив вместо рекомендации, но «должен» правильно выражать смысл. –