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

标签 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)

我收到无关参数标签错误!

帮助快速菜鸟理解。为什么我需要标记类参数,但不能标记函数参数?为什么函数和类会有这样的不同?我确信我缺少一些东西。

最佳答案

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

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

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

关于swift - 为什么我必须以键值形式将参数传递给类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27239518/

相关文章:

ios - UITableView 在我的自定义单元 UILabel 和重用问题中无法正确显示数据

ios - UITableView/动态原型(prototype)/自定义单元格 - 第一个单元格总是比其余单元格大?

ios - 获取当前导航 Controller 的正确方法

swift - 如何扩展ReactiveCocoa4的SignalProducerType

swift - for case let 和 for 循环 + if let 之间有区别吗?

ios - JSON 数组中的这两行之间有什么不同,这意味着没有被识别?

ios - Firebase 如何使用 childByAutoId() 保存多个 child

swift - iOS 12 中压缩图像。这段代码将如何更新?

swift - 如何在 Swift 3.0 中拖放 Sprite ?

ios - SpriteKit 中的场景