自定义URLSessionDataTask初始化出现黄色警告 如何修复对应代码问题
问题修复方案
错误原因与修复步骤
- 问题1:自定义子类和父类重名,会触发递归引用报错
修复:将自定义类名修改为不重复的名称,比如MockURLSessionDataTask - 问题2:
completion参数仅标注了@escaping,缺少完整的闭包类型声明,不符合Swift语法规则
修复:补全和系统网络回调一致的闭包类型:@escaping (Data?, URLResponse?, Error?) -> Void - 问题3:类内没有声明
statusCode、completion两个存储属性,初始化接收的参数没有被存储,后续execute方法调用时会找不到对应变量
修复:在类中补充两个私有属性的声明 - 问题4:自定义初始化器没有调用父类的初始化方法,不符合继承语法要求
修复:在自定义初始化器逻辑末尾调用父类的init()做兼容即可,测试场景下不需要调用父类的网络相关指定初始化器
修复后完整代码如下:
class MockURLSessionDataTask: URLSessionDataTask { private let url: URL private let data: Data private let statusCode: Int private let completion: (Data?, URLResponse?, Error?) -> Void init(configuration: URLSessionConfiguration = .default, url: URL, data: Data, statusCode: Int, completion: @escaping (Data?, URLResponse?, Error?) -> Void) { self.data = data self.url = url self.statusCode = statusCode self.completion = completion super.init() } func execute() { let response = HTTPURLResponse(url: url, statusCode: statusCode, httpVersion: nil, headerFields: nil) completion(data, response, nil) } }
内容的提问来源于stack exchange,提问作者Kariny
相关产品推荐
相关产品推荐

