Swift 对这个初始化方法接受这些类型的参数感到困惑吗?

Swift 对这个初始化方法接受这些类型的参数感到困惑吗?,swift,class,initialization,Swift,Class,Initialization,//抱歉,这可能有点模糊,但我很难弄清楚为什么super.init有两个类型为length的参数???也许这太模糊了,但我很困惑 init(length: Int) { super.init(length: length, width: length) } 您正在调用super初始化一个正方形(可以这么说),其中length=width=传递到子类init的值 最好将super.init标签更改为height:width:,以避免此类混淆 编辑: super.init(length:

//抱歉,这可能有点模糊,但我很难弄清楚为什么super.init有两个类型为length的参数???也许这太模糊了,但我很困惑

init(length: Int) {

super.init(length: length, width: length) 


}

您正在调用
super
初始化一个正方形(可以这么说),其中
length=width=传递到子类init的值

最好将
super.init
标签更改为
height:width:
,以避免此类混淆

编辑:

super.init(length: length, width: length)
            |        |      |       |
            |        |      |      Another parameter's value
            |        |     Another parameter's name
            |   This is the parameter's value, not type
        This is a parameter's name    
“类型”仅在声明函数时适用:

class SuperClass {
    init(length: Int, width: Int) {
        // do something
    }
}

它们不是长度类型。他们将
length
参数的值赋给这个
init
方法。@SamiKuhmonen但不应该有一个变量名,后面跟着冒号,然后是类型吗?不,这是在调用,没有定义一个方法我不明白为什么两个参数length和width有“type”length??它们不应该有Int类型或有效类型吗?哦,我知道了,我不知道,只有在声明函数时才应用这些类型…….非常感谢,我实际上在学习一本swift书籍,问题是像这样的许多小概念都无法理解。最后一个问题,我尝试将参数名链接到height和width,以避免与init()中接受的length参数混淆,但它希望我使用与超类的init()方法中使用的相同的参数名……?您也必须更改超类'
init
中的参数名(假设您可以访问超类代码)哦,我明白了,所以我不能使用自己的参数名。