функция и ее параметры
Учу swift не так давно и есть некоторые не понятны моменты, а именно для чего функции, инициализатору нужен параметр с внешним именем и с локальным именем. Ответь те как можно понятнее и желатьно примером
struct Celsius {
var temperatureInCelsius: Double
init(fromFahrenheit fahrenheit: Double) {
temperatureInCelsius = (fahrenheit - 32.0) / 1.8
}
init(fromKelvin kelvin: Double) {
temperatureInCelsius = kelvin - 273.15
}
}
let boilingPointOfWater = Celsius(fromFahrenheit: 212.0)
// boilingPointOfWater.temperatureInCelsius is 100.0
let freezingPointOfWater = Celsius(fromKelvin: 273.15)
// freezingPointOfWater.temperatureInCelsius is 0.0
Ответы (1 шт):
Автор решения: schmidt9
→ Ссылка
Не совсем понятно, почему "argument label" здесь переведено как "внешнее имя (параметра)" (ср. оригинал и адекватный перевод), то же касается и "локального имени". Собственно по указанным ссылкам вопрос с параметрами и их ярлыками разъяснен.
Что касается вопроса "для чего"
- для различения сигнатур функций
- для удобства и следования традиции (здесь Swift наследует особенности именования в Objective C)
Пример
struct Celsius {
var temperatureInCelsius: Double
// 1. ярлык и параметр
init(fromFahrenheit fahrenheit: Double) {
temperatureInCelsius = (fahrenheit - 32.0) / 1.8
}
// 2. только параметр
init(fahrenheit: Double) {
temperatureInCelsius = (fahrenheit - 32.0) / 1.8
}
// 3. параметр с пропуском
init(_ fahrenheit: Double) {
temperatureInCelsius = (fahrenheit - 32.0) / 1.8
}
init(fromKelvin kelvin: Double) {
temperatureInCelsius = kelvin - 273.15
}
}
// 1
let boilingPointOfWater1 = Celsius(fromFahrenheit: 212.0)
// 2
let boilingPointOfWater2 = Celsius(fahrenheit: 212.0)
// 3
let boilingPointOfWater3 = Celsius(212.0)