微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

快速语言中的'#'标记是什么意思

如何解决快速语言中的'#'标记是什么意思

一个参数签名的认行为发生了巨大变化。要了解参数标签(例如“外部参数”)和参数名称(例如“局部参数”)如何工作,请阅读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

方法函数间的行为没有区别。

不推荐使用下面描述的功能,需要两次写入参数名称才能获得与之前的哈希符号相同的行为。

对于函数调用函数且不清楚某些参数的用途时,请为这些参数提供外部名称

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将名称用作本地参数名称和外部参数名称

摘录自:苹果公司“ The Swift Programming Language”。iBooks。https://itunes.apple.com/ru/book/swift-programming- language/id881256329?l=zh-TW&mt=11

解决方法

我看过这样的代码:

func hello(name: String,#helloMessage: String) -> String { 
    return "\(helloMessage),\(name)." 
}

我的问题是#参数名称前的标记是什么意思?这是否意味着在调用函数时必须指定参数?

此外,没有这个#标记,有人能告诉我功能的不同吗?代码示例非常受欢迎。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。