Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift:如何获取“的价值”_&引用;参数_Swift_Function_Parameters - Fatal编程技术网

Swift:如何获取“的价值”_&引用;参数

Swift:如何获取“的价值”_&引用;参数,swift,function,parameters,Swift,Function,Parameters,我注意到这是Swift中的一个有效函数: func test(_:String) { print("How do I access '_'?") } 如何访问参数 编辑 另外一个问题,是否有一个有效/良好的使用案例?这就是所谓的通配符匹配模式,引入它只是为了不能够使用参数,因为您根本不关心它 发件人: 通配符模式匹配并忽略任何值,并由下划线(\)组成。当您不关心匹配的值时,请使用通配符模式 如果需要访问参数值,则必须使用正确的标识符 关于你问题的更新部分。我不知道您为什么要这样做(这

我注意到这是Swift中的一个有效函数:

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)")
    }
}
任何外部使用您的库的人都会使用abstract
Foo
,而不知道
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不应该有这样的方式。如果有,这将是一个错误或丑陋的黑客。