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