Swift 如何对存储在变量中的函数/闭包进行大小写匹配?

Swift 如何对存储在变量中的函数/闭包进行大小写匹配?,swift,pattern-matching,Swift,Pattern Matching,考虑以下代码: func testA(){} func testB(value:Int){} func testC(value:String){} var someTest:Any = testA 如何对包含闭包的变量进行大小写匹配以找到正确的闭包,以便调用它 switch someTest{ case let test where test:() -> Void: test() case let test where test:(value:Int)

考虑以下代码:

func testA(){}
func testB(value:Int){}
func testC(value:String){}

var someTest:Any = testA
如何对包含闭包的变量进行大小写匹配以找到正确的闭包,以便调用它

switch someTest{
    case let test where test:() -> Void:
        test()
    case let test where test:(value:Int) -> Void:
        test(4)
    case let test where test:(value:String) -> Void:
        test("A")
}

类似的情况可能吗?

闭包类型的切换模式与其他类型的切换模式相同:

switch someClosure {
    case let runnable as () -> Void:
        runnable()
    case let intConsumer as (Int) -> Void:
        intConsumer(4)
    case let stringConsumer as (String) -> Void:
        stringConsumer("A")
}

您需要EG代码> CASE让测试为(String)-Value,根据您的用例进行比较,您可以考虑使用<代码> EnUM <代码>,并为每个函数类型使用相关值;然后你可以在不必输入cast的情况下彻底切换。@Alexander:Q&A不包括闭包的匹配,我想知道这是否值得一个单独的答案(最好是Hamish最初的评论)Duh!因为不在哪里。当然哈米什,把它贴出来作为回答,我会接受的。哈哈,是的,我接受了,公平地说,我会重新开放