为什么我必须以键值形式将参数传递给类?

时间:2014-12-01 23:50:34

标签: swift

class NamedShape {
    var numberOfSides: Int = 0
    var name: String

    init(name: String) {
        self.name = name
    }

    func simpleDescription() -> String {
        return "A shape with \(numberOfSides) sides named \(name)"
    }
}

我有以下示例类。要创建一个新实例,我做

let shape = NamedShape(name: "Test")

参数由init()函数捕获,对吧?但是,如果我这样做:

let shape = NamedShape("Test")

我得到一个缺少参数的标签错误!

但是,如果我定义这样一个愚蠢的函数:

func printInt(numberIn: Int) {
    println(numberIn)
}

我可以使用以下方法调用它:

printInt(5)

但是,如果我尝试使用以我创建类的方式格式化的参数来调用它:

printInt(numberIn: 5)

我得到了一个无关的参数标签错误!

帮助一个快速的菜鸟了解。为什么我需要标记类参数,但我不能标记函数参数?为什么函数和类以这种方式不同?我确信有些东西我不知道。

2 个答案:

答案 0 :(得分:1)

由于未使用函数名称调用初始化函数,因此参数类型和名称用于消除多个init()函数之间的歧义。因此,init()函数参数默认具有外部名称。

您可以使用下划线明确选择退出默认参数名称:

init(_ name: String) {
    self.name = name
}

答案 1 :(得分:0)