如何在Swift 2中存储函数引用?

时间:2016-07-07 01:24:49

标签: swift lambda swift2 react-native

根本问题是SkPaymentQueue.defaultQueue().addPayment()不允许您传递回调函数,并且无法在运行时(我知道)向SKPaymentTransactionObserver传递函数。我正在使用React-native版本0.28创建一个模块,允许我进行应用内购买,但是我想在应用内购买完成后回调一个Javascript函数。

因此,我打算在类中存储对RCTResponseSenderBlock回调的引用,并在SKPaymentTransactionObserver中引用它。但是,我不知道如何在Swift中引用一个函数。

我尝试过制作以下变量

weak var purchaseCallback: RCTResponseSenderBlock = nil

在课程的顶部,所以我可以设置它并在以后引用它;然而,斯威夫特抱怨如下:

Nil cannot initialize specified type 'RCTResponseSenderBlock'

如果有办法处理功能参考和/或更好的方式进行购买回调,我会感激一些帮助!

1 个答案:

答案 0 :(得分:2)

正如Bryan Chen在上面的评论中指出的那样,使变量成为可选项就行了。

以下是我如何定义保存回调的变量:

var purchaseCallback: RCTResponseSenderBlock? = nil

以下是我如何在Swift中使用React-native调用的函数存储函数引用:

@objc func purchaseProduct(identifier: String, callback successCallback: RCTResponseSenderBlock) {
  purchaseCallback = successCallback
}