提问者:小点点

如何用下面的完成处理程序调用函数?


如何调用具有以下签名的函数?

func purchaseSubscription(productId: String, completion:  @escaping  (Bool, String, String) -> Void) {

是吗

InAppHandler.purchaseSubscription("test") {
     processPurchase()
}

共3个答案

匿名用户

可以有多个窗体来调用该方法。

1.定义调用闭包时的参数。

InAppHandler.purchaseSubscription(productId: "test") {(x, y, z) in
    print(x, y, z)
    processPurchase()
}

2.您可以在调用闭包时对其中的参数使用速记形式($0,$1等),即。

InAppHandler.purchaseSubscription(productId: "test") {
    print($0, $1, $2)
    processPurchase()
}

以上2个相同。 只是在第一个例子中,您给出了参数名称,而在第二个例子中,您使用了这些参数的速记法。

3.如果您没有使用闭包中获取的任何参数,请用下划线(_)标记它们,

InAppHandler.purchaseSubscription(productId: "test") {(_, _, _) in
    processPurchase()
}

您可以根据您的要求使用任何其他表格。

匿名用户

完成处理程序需要三个输入参数。 您可以忽略这些参数,但必须明确表示这些参数。 此外,签名表明这是一个成员函数,而您似乎在调用类型(class,struct,enum.。。)上的函数。 所以正确的方法是:

let inAppHandler = InAppHandler()
inAppHandler.purchaseSubscription(productId: "test") { _, _, _ in 
    processPurchase()
}

匿名用户

这是你的电话:

InAppHandler().purchaseSubscription(productId: "anyStringData") { (boolCheck, result1, result2) in
            print(result1)
        }

这是你的定义:

 func purchaseSubscription(productId: String, completion:  @escaping  (Bool, String, String) -> Void) {
    completionResult(true,"Data1", "Data2")
    }