[英]Swift gives syntax error while func calling
我是快速的新人,我正在跟随苹果医生研究它。 苹果医生
func greet(name: String, day: String) -> String {
return "Hello \(name), today is \(day)."
}
greet("Bob", day: "Tuesday")
我只是从apple doc复制上面的代码并尝试在操场上运行,但在最后一行它给我语法错误并告诉删除日:在那。 当我被删除的一天:在乐趣称其运行完美
greet("Bob", "Tuesday")
苹果医生是否有任何错误,或者我做错了什么?
这些是Swift“函数”而不是“方法”。 它们不需要参数名称。 您仍然可以在声明中添加它们以便于阅读,但在调用时无法使用它。
另一方面,类“方法”被命名并按预期工作。
如果在调用时仍需要命名参数,请尝试以下操作:
func greet(name: String, #day: String) -> String {
return "Hello \(name), today is \(day)."
}
greet("Bob", day: "Tuesday")
这将为您提供预期的结果。
在文档中找到:
但是,这些参数名称仅在函数本体中使用,并且在调用函数时不能使用。 这些参数名称称为本地参数名称,因为它们仅可在函数体内使用。
关于方法和函数的注释:简单地说,方法属于一个类。 功能没有。 来自文档:
函数是执行特定任务的自包含代码块。 您为函数指定了一个标识其功能的名称,此名称用于“调用”函数以在需要时执行其任务。
请注意,Swift 2.0在方法调用和函数调用之间没有区别,因此在Swift 2.0中,您的方式是有效的。
命名函数的参数工作方式不同,具体取决于函数的定义位置(在初始化程序中也是如此)
顺便说一下,你定义的函数是全局的,在类之外 。 在这种情况下,函数调用不会命名参数。
如果你要在一个类中定义函数 ,你的第一次尝试将完美地工作。 在类(方法)中的函数中,您可以命名除第一个参数之外的参数。 如果你想拥有名字,你也可以使用
func greet(#firstParameter: String, secondParameter: String) ...
为了完成所有这些, 初始化程序需要所有名为的参数。 即使是第一个甚至没有#。
这一切听起来有点令人困惑吗? 好吧,Apple有同样的看法,根据WWDC 2015上的说法,他们改变了Swift 2中的行为并使其更加一致。
功能:
func greet(name: String, day: String) -> String {
}
“name”和“day”是变量而不是Obj C中的标签。您可以将“day”写为标签:
func greet(name: String, day day: String) -> String {
}
你必须明白像Swift这样的新语言必然会改变。 这是其中一项变更,它是在WWDC 2015期间推出的。
Apple统一了您定义和调用函数和方法的方式,因此行为是相同的。 他们完全删除#
从func
定义,并使其认为的第一个参数的名称要求func
列入名,而所有其他参数要么有一个名字,或者没有的选项。
这些是Swift 2.0
中有效func
声明的示例,它将与Xcode 7和iOS 9一起发布。
func moveShapeToPosition(position: CGPoint, andScaleBy scale: CGFloat)
func moveShapeToPosition(position: CGPoint, scale: CGFloat)
func moveShapeToPosition(position: CGPoint, _ scale: CGFloat)
并打电话给他们。
moveShapeToPosition(CGPoint(x: 0, y: 0), andScaleBy: 1)
moveShapeToPosition(CGPoint(x: 0, y: 0), scale: 1)
moveShapeToPosition(CGPoint(x: 0, y: 0), 1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.