Swift中的本地和外部参数名称有什么区别

时间:2015-01-14 01:02:44

标签: ios swift

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html#//apple_ref/doc/uid/TP40014097-CH18-ID203

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

我很困惑为什么init函数有(fromFahrenheit fahrenheit:Double)和(fromFahrenheit fahrenheit:Double)。文档说:

  

“第一个初始化程序有一个初始化参数,外部名称来自华氏温度,本地名称为华氏温度。第二个初始化程序有一个初始化参数,外部名称来自开尔文,本地名称为开尔文。”

为什么我们需要这么多名字?

2 个答案:

答案 0 :(得分:4)

  1. 这用于与Objective C的简单界面。 Objective C 方法既有命名本地参数,也有外部参数。

    例如,这是一种典型的Objective C方法。

    -(void)setValue:(NSObject *)object forKey:(NSObject *)key
    

    这将被称为[dict setValue:object1 forKey:object2]

    swift中的相同功能将被称为

    dict.setValue(object1,forKey:object2)
    
  2. 它还阐明了每个参数的用途,并有助于区分具有相似名称和不同参数的功能。函数也可以具有相同的签名和不同的外部名称。

    init(fromFahrenheit fahrenheit: Double) {
        temperatureInCelsius = (fahrenheit - 32.0) / 1.8
    }
    init(fromKelvin kelvin: Double) {
        temperatureInCelsius = kelvin - 273.15
    }
    

    在您的示例中,两个函数都采用Double。没有外部参数,在调用时将无法区分它们。

答案 1 :(得分:2)

在您的方法中使用局部参数,而在调用方法时使用外部参数。