簡體   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