Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 初始值设定项和函数中参数之间的快速语法差异_Ios_Swift_Syntax - Fatal编程技术网

Ios 初始值设定项和函数中参数之间的快速语法差异

Ios 初始值设定项和函数中参数之间的快速语法差异,ios,swift,syntax,Ios,Swift,Syntax,在我看来,Swift的语法在调用初始值设定项和至少有一个参数的函数之间存在差异 我们考虑这两个例子: class SimpleClass { var desc: String init(desc: String) { self.desc = desc } } let aClass = SimpleClass(desc: "description") 及 我觉得奇怪的是,编译器强制您忽略函数调用中的第一个标签,否则您将得到一个错误“调用中的无关参数标

在我看来,Swift的语法在调用初始值设定项和至少有一个参数的函数之间存在差异

我们考虑这两个例子:

class SimpleClass {

    var desc: String

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

let aClass = SimpleClass(desc: "description")

我觉得奇怪的是,编译器强制您忽略函数调用中的第一个标签,否则您将得到一个错误“调用中的无关参数标签'a:”。然而,如果我们想在初始化过程中省略第一个标签,则会出现错误“调用中缺少参数标签'desc:”

语言指南说:

当使用多个参数调用函数时,第一个参数之后的任何参数都将根据其相应的参数名进行标记

资料来源:

初始化器的参数在 您将创建该类的一个实例

资料来源:


我是Swift新手,所以我希望我没有遗漏什么,但这似乎是语法上的差异,因为初始值设定项/构造函数只是一种函数,在函数调用中强制省略第一个标签对我来说似乎不一致。

这是因为Swift注重可读性;函数调用,以便能够像句子一样阅读。具体请参见“方法的本地和外部参数名称”一节。为了符合这种风格,您的函数应该更像:

func add(a: Int, to b: Int) -> Int {
    return a + b
}

let c = add(1, to: 2)

谢谢你的解释,对我来说仍然很不寻常。Swift继承了Objective C风格,其中参数名通常是函数名的一部分:[self addA:1 toB:2]Swift:addA(1,toB:2)Init是一个特例。它是一个关键字,不能创建initA()或initB(),它总是init(),所以默认情况下需要第一个参数名。
func add(a: Int, to b: Int) -> Int {
    return a + b
}

let c = add(1, to: 2)