快速语言中’#’标记的含义是什么?
我看到这样的代码:
func hello(name: String,#helloMessage: String) -> String { return "(helloMessage),(name)." } 我的问题是#标记在参数名称之前是什么意思?这是否意味着在调用函数时必须指定参数? 此外,任何人都可以告诉我与功能的区别没有这个#标记?代码示例是非常受欢迎的.
更新(Swift 3.0)
第一个参数的签名的默认行为发生了巨大变化.要了解参数标签(例如“外部参数”)和参数名称(例如“本地参数”)的工作原理,请阅读Apple的“Swift”书中的“功能参数标签和参数名称”一章. 一些例子: func someFunction(parameterName: Int) { parameterName } someFunction(parameterName: 5) // argument label not specified func someFunction(argumentLabel parameterName: Int) { parameterName } someFunction(argumentLabel: 5) // argument label specified func someFunction(_ parameterName: Int) { parameterName } someFunction(5) // argument label omitted 方法和函数之间的这种行为没有区别. 更新(Swift 2. *) 以下描述的功能已被弃用,需要将参数名称两次写入以获得与之前的哈希符号相同的行为. 更新(示例) 对于函数:当调用函数时,某些参数的目的不清楚时,您将为这些参数提供外部名称. func someFunction(parameterName: Int) { parameterName } someFunction(5) // What is the meaning of "5"? func someFunction(externalParameterName parameterName: Int) { parameterName } someFunction(externalParameterName: 5) // Now it's clear. 但是,如果外部和本地名称相同,则只需在参数名称之前编写一个哈希符号. func someFunction(#parameterName: Int) { parameterName } // It's actually like: // func someFunction(parameterName parameterName: Int) { parameterName } someFunction(parameterName: 5) 对于方法:默认情况下,第一个参数名称只是本地的(像函数一样),但是第二个和后续的参数名称都是本地的和外部的(就像你在参数名之前写一个哈希符号一样,这个隐含在这里) class SomeClass { func someMethodWith(firstParameter: Int,andSecondParameter: Int) { ... } } SomeClass().someMethodWith(5,andSecondParameter: 10) 您可以使用#(或添加一个明确的外部名称)作为方法的第一个参数,但它不符合Objective-C风格的调用. class SomeClass { func someMethodWith(#firstParameter: Int,andSecondParameter: Int) { ... } } SomeClass().someMethodWith(firstParameter: 5,andSecondParameter: 10) 原来的答案
摘录自:苹果公司“Swift编程语言”iBooks. https://itunes.apple.com/ru/book/swift-programming-language/id881256329?l=en&mt=11 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |