Swift:如何获取“的价值”_&引用;参数
我注意到这是Swift中的一个有效函数:Swift:如何获取“的价值”_&引用;参数,swift,function,parameters,Swift,Function,Parameters,我注意到这是Swift中的一个有效函数: func test(_:String) { print("How do I access '_'?") } 如何访问参数 编辑 另外一个问题,是否有一个有效/良好的使用案例?这就是所谓的通配符匹配模式,引入它只是为了不能够使用参数,因为您根本不关心它 发件人: 通配符模式匹配并忽略任何值,并由下划线(\)组成。当您不关心匹配的值时,请使用通配符模式 如果需要访问参数值,则必须使用正确的标识符 关于你问题的更新部分。我不知道您为什么要这样做(这
func test(_:String) {
print("How do I access '_'?")
}
如何访问参数
编辑
另外一个问题,是否有一个有效/良好的使用案例?这就是所谓的通配符匹配模式,引入它只是为了不能够使用参数,因为您根本不关心它
发件人:
通配符模式匹配并忽略任何值,并由下划线(\)组成。当您不关心匹配的值时,请使用通配符模式
如果需要访问参数值,则必须使用正确的标识符
关于你问题的更新部分。我不知道您为什么要这样做(这只是一个疯狂的想法),但是如果您想完全隐藏
public
类的方法的参数名称,但仍然能够在private
子类中使用它们,您可以执行以下操作:
public class Foo {
func test(_: String, _: Int) {
print("[Ignored]")
}
}
private class Bar: Foo {
override func test(stringArgument: String, _ intArgument: Int) {
print("\(stringArgument) \(intArgument)")
}
}
任何外部使用您的库的人都会使用abstractFoo
,而不知道test
方法的参数名。这就是所谓的通配符匹配模式,引入它只是为了不能够使用参数,因为您根本不关心它
发件人:
通配符模式匹配并忽略任何值,并由下划线(\)组成。当您不关心匹配的值时,请使用通配符模式
如果需要访问参数值,则必须使用正确的标识符
关于你问题的更新部分。我不知道您为什么要这样做(这只是一个疯狂的想法),但是如果您想完全隐藏
public
类的方法的参数名称,但仍然能够在private
子类中使用它们,您可以执行以下操作:
public class Foo {
func test(_: String, _: Int) {
print("[Ignored]")
}
}
private class Bar: Foo {
override func test(stringArgument: String, _ intArgument: Int) {
print("\(stringArgument) \(intArgument)")
}
}
任何使用您的库的外部用户都会使用abstract
Foo
,而不知道test
方法的参数名称。使用的要点是您对使用该参数不感兴趣。下面是一个示例用法
if let _ = someVariable as? String {
//Do stuff here if someVariable is a string
//But I'm not interested in accessing the unwrapped value, so I set the unwrapped variable name to _
}
使用u的意义在于您对使用参数不感兴趣。下面是一个示例用法
if let _ = someVariable as? String {
//Do stuff here if someVariable is a string
//But I'm not interested in accessing the unwrapped value, so I set the unwrapped variable name to _
}
如何访问参数?
你没有。使用该语法,您明确表示不想访问参数
用例
假设您可以访问一个非常强大的异步API,如下所示
func theAnswerToLife(success:(answer: String) -> (), failure:(error: NSError) -> ())
是的,我当然对实施保密
现在,如果函数answertolife
确实找到了答案,则调用success
闭包,否则调用failure
您必须通过两个闭包/函数,但您真正感兴趣的只是答案
,如果出现问题,您不介意实际的错误
所以你可以定义
func tellEveryone(answer: String) {
print("The answer to life is " + answer)
}
func badNews(_:NSError) {
print("Something went wrong, we will try again tomorrow")
}
badNews
可以作为第二个参数传递给theAnswerToLife
,将来查看代码的人会立即明白badNews
并不关心收到的参数
theAnswerToLife(tellEveryone, failure: badNews)
如何访问参数?
你没有。使用该语法,您明确表示不想访问参数
用例
假设您可以访问一个非常强大的异步API,如下所示
func theAnswerToLife(success:(answer: String) -> (), failure:(error: NSError) -> ())
是的,我当然对实施保密
现在,如果函数answertolife
确实找到了答案,则调用success
闭包,否则调用failure
您必须通过两个闭包/函数,但您真正感兴趣的只是答案
,如果出现问题,您不介意实际的错误
所以你可以定义
func tellEveryone(answer: String) {
print("The answer to life is " + answer)
}
func badNews(_:NSError) {
print("Something went wrong, we will try again tomorrow")
}
badNews
可以作为第二个参数传递给theAnswerToLife
,将来查看代码的人会立即明白badNews
并不关心收到的参数
theAnswerToLife(tellEveryone, failure: badNews)
只需将其替换为
func测试(str:String)
。。。如果要访问参数,则不应将其称为\u
@MartinR,当然可以,但我的意思是,如果使用u.而不是像“str”这样的任何参数名称,则如何访问u的值。为什么要这样做?默认情况下,第一个参数的外部名称为空或者您是否在考虑其他参数,如在测试(a:String,\b:String)
中?@MartinR,不,我很好奇是否有方法访问\uu
的值。当我修改正在编写的函数的参数时,我注意到了这一点。用func-test(str:String)
替换它即可。。。如果要访问参数,则不应将其称为\u
@MartinR,当然可以,但我的意思是,如果使用u.而不是像“str”这样的任何参数名称,则如何访问u的值。为什么要这样做?默认情况下,第一个参数的外部名称为空或者您是否在考虑其他参数,如在测试(a:String,\b:String)
中?@MartinR,不,我很好奇是否有方法访问\uu
的值。我只是在修改我正在编写的函数的参数时注意到了这一点。因此,这意味着,如果它是u,就没有办法访问该值?@yoninja no,\uu的全部原因是放弃value@yoninja不应该有这样的方式。如果有,这将是一个bug或丑陋的黑客。因此,这意味着如果有,就没有办法访问该值?@yoninja no,\uu
的全部原因是丢弃value@yoninja不应该有这样的方式。如果有,这将是一个错误或丑陋的黑客。