使用Swift回调处理程序时无法通过平台通道返回值
我正在与弗利特和斯威夫特一起工作。我正在尝试使用AuthrizeNet SDK授权信用卡,不幸的是,AuthrizeNet SDK本机不支持Flatter。为了解决这个问题,我在iOS AppDelegate中创建了一个平台通道,我成功地管理了从Flatter接收数据。我现在的问题是如何从授权函数的回调处理程序(从AuthorizeNet SDK)中返回该数据?尝试调用flatter result函数时,Swift编译器抛出以下错误:使用Swift回调处理程序时无法通过平台通道返回值,swift,flutter,authorize.net,flutter-platform-channel,Swift,Flutter,Authorize.net,Flutter Platform Channel,我正在与弗利特和斯威夫特一起工作。我正在尝试使用AuthrizeNet SDK授权信用卡,不幸的是,AuthrizeNet SDK本机不支持Flatter。为了解决这个问题,我在iOS AppDelegate中创建了一个平台通道,我成功地管理了从Flatter接收数据。我现在的问题是如何从授权函数的回调处理程序(从AuthorizeNet SDK)中返回该数据?尝试调用flatter result函数时,Swift编译器抛出以下错误:转义闭包捕获非转义参数“result”。这是我的密码: han
转义闭包捕获非转义参数“result”
。这是我的密码:
handler!.getTokenWithRequest(request, successHandler: { (inResponse:AcceptSDKTokenResponse) -> () in
let paymentResponseModel: PaymentResponseModel = PaymentResponseModel.init(
token: inResponse.getOpaqueData().getDataValue(),
resultCode: inResponse.getMessages().getResultCode(),
tokenResultDescription: inResponse.getOpaqueData().getDataDescriptor(),
messageCode: inResponse.getMessages().getMessages()[0].getCode(),
messageText: inResponse.getMessages().getMessages()[0].getText()
)
result(String(data: try! JSONEncoder().encode(paymentResponseModel), encoding: String.Encoding.utf8))
}) { (inError:AcceptSDKErrorResponse) in
let paymentResponseModel: PaymentModelErrorResponse = PaymentModelErrorResponse.init(
code: inError.getMessages().getResultCode(),
message: inError.getMessages().getMessages()[0].getCode(),
details: inError.getMessages().getMessages()[0].getText()
)
result(String(data: try! JSONEncoder().encode(paymentResponseModel), encoding: String.Encoding.utf8))
}
我尝试了在
getTokenWithRequest
函数之外调用result函数的不同方法,但无法使其工作。我对Swift编程相当陌生,所以如果这个问题含糊不清或有简单的解决方案,我深表歉意。谢谢大家! 问题在于将来将调用successHandler
(作为回调),但必须立即调用result
,并且必须立即从代码段的方法返回。那么,如何获得成功/错误响应呢?当令牌响应可用时,您必须从本机调用Dart。然后,在Dart端,您将不得不等待,直到做出响应调用,此时您可以更新应用程序状态和UI
它变成一个双向方法通道,如下所示:
---token request--->
<---result----------
<---token response--
----result--------->
---令牌请求--->
谢谢你的回复!为了验证我是否理解您的答案,我需要在授权函数之前发送方法通道结果,然后一旦授权,使用另一个方法通道调用颤振函数(本机->颤振)?正确,除了你可以在相反的方向上使用相同的方法频道-无需创建不同的频道。然而,这是Android和iOS之间的一个特性差异。Android端完全能够异步返回令牌响应