繁体   English   中英

在func调用时,Swift会出现语法错误

[英]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)

这是Swift的版本与众不同。

我在Xcode 7.0 Beta中运行该演示,它运行得很好。

此外,当我尝试在Xcode 7.0 Beta中greet greet("Bob", "Tuesday")时,它给了我错误的那day:缺失。

在此输入图像描述

但是,当我在Xcode 6.4中运行它时,它和你的一样抱怨。

在此输入图像描述

在Swift中,函数和方法是不同的。 你可以在这里找到详细的答案

你必须创建function ,这意味着你可能已经在Viewdidload创建了它(这是我的猜测)。 所以你不能专门给出函数参数名。

如果你已经创建了method (在viewdidload之外),那么你可以像你尝试过一样打电话

greet("Bob", day: "Tuesday")

要么

检查外部参数名称的速记外部参数名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM