gpt4 book ai didi

objective-c - 尝试将 Objective C 完成 block 移植到 Swift 中时出现问题

转载 作者:可可西里 更新时间:2023-11-01 00:37:36 26 4
gpt4 key购买 nike

我正在使用以下方法使用 Objective-C 编写的第三方库:

- (void)manageServerResponse:(NSURLResponse*)response NSData:(NSData*)data andNSError:(NSError*)error onComplete:(void (^)(NSInteger kindOfError, NSDictionary*jsonResponse))onComplete;

当我将它移植到 swift 时,我会执行以下操作:

typealias ResponseCompletedBlock = (NSInteger, NSDictionary?) -> Void
...
let completedResponseMethod : ResponseCompletedBlock = {(kindOfError: NSInteger, jsonResponse: NSDictionary?) -> Void in
self.onComplete(kindOfError, jsonResponse: jsonResponse)}

let responseManager: ResponseManager = ResponseManager.sharedResponseManager() as! ResponseManager
responseManager.manageServerResponse(response,
NSData: data,
andNSError: error,
onComplete: completedResponseMethod)

我收到这个错误:

Cannot invoke 'manageServerResponse' with an argument list of type '(NSURLResponse?, NSData: NSData?, andNSError: NSError?, onComplete: ResponseCompletedBlock)'

如果我将最后一句替换为

responseManager.manageServerResponse(response, 
NSData: data,
andNSError: error,
onComplete: nil)

一切正常,所以我认为问题出在 block 结构上,但我已尝试更改所有内容,但错误仍然存​​在。

你能帮忙吗?

最佳答案

NSDictionary * 被映射到 Swift 为 [NSObject : AnyObject]!,因此响应 block 的类型应该是

typealias ResponseCompletedBlock = (Int, [NSObject : AnyObject]!) -> Void

因此

let completedResponseMethod = {(kindOfError: Int, jsonResponse: [NSObject : AnyObject]!) -> Void in
// ...
}

找出正确的 Swift 函数签名的一种方法是使用 Xcode 中的自动完成:你开始打字

 responseManager.manageServerResponse(

Xcode 建议

enter image description here

关于objective-c - 尝试将 Objective C 完成 block 移植到 Swift 中时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30502107/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com