在objectiveC的关闭中打破保留循环并在swift中使用

我的应用程序有目标 C 和 swift 的代码。网络调用方法是用 Objective C 编写的,通过块返回结果。

- (void)getTopSearchResult:(void (^)(NSDictionary *,NSError *))completion {
NSString *urlString = [IKURLFactory getSikTopSearchUrl];
IKRestJsonEngine *jsonEngine = [[IKRestJsonEngine alloc] init];
NSDictionary *jsonObject = [jsonEngine jsonObject];
[[IKNetworkManager sharedInstance] invokeRESTRequestWithRequestMethodType:IKRESTNetworkMethodTypeGet
                                                                URLString:urlString RequestHeaders:jsonObject
                                                              RequestBody:nil RequestIdentifier:nil
                                                        CompletionHandler:^(NSDictionary *data,NSError *error) {
                                                            if (error) {
                                                                completion(nil,error);
                                                                return;
                                                            }
                                                            if (data.count > 0) {
                                                            completion(data,nil);
                                                            }
                                                        }];

}

我正在像这样从我的 swift viewModel 类调用上面的函数 -

func getTopSearchData() {
    IKAppNetworkManager.instance()?.getTopSearchResult({ [weak self] (dict,error) in
        if (error != nil) {
            print(error?.localizedDescription ?? "")
        } else {
            
            if let jsonDict = dict {
                do {
                    let jsonData = try JSONSerialization.data(withJSONObject: jsonDict,options: .prettyPrinted)
                    let searchResults = try JSONDecoder().decode(IKTopSearchModel.self,from: jsonData)
                    if let tmpResults = searchResults.result {
                        self?.topSearchList = tmpResults
                    }
                    
                } catch {
                    print(error.localizedDescription)
                }
            }
        }
    })
}

然后通知ViewController Like

 private(set) var topSearchList = [IKTopSearchModelElement]() {
    didSet {
        delegate?.didReceivedTopSearchResult()
    }
}

但是上面的实现导致了 ViewController 和 ViewModel 之间的强保留循环。我已经尝试过协议、关闭中的弱自引用、完成处理程序和 Nsnotification 中心来通知视图控制器重新加载视图。

aaaaaap 回答:在objectiveC的关闭中打破保留循环并在swift中使用

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/841394.html

大家都在问