这是我在 obj-c 中的代码:
__block NSString *requestReference = [self operation:method url:url parameters:parameters headers:headers success:^(NSURLSessionDataTask *task, id responseObject) {
NSError *error = [NSError errorWithSessionTask:task responseObject:responseObject];
if (error) {
NSLog(@"error - %@", error);
[delegate requestWithReference:requestReference didFinishWithBusinessError:error];
} else {
id responseModel;
if (modelClass && responseObject) {
if ([responseObject isKindOfClass:[NSDictionary class]]) {
// if response is a dictionary, create model out of it
responseModel = [modelClass objectFromDictionary:responseObject error:&error];
} else if ([responseObject isKindOfClass:[NSArray class]]) {
}
}
} } failure:^(NSURLSessionDataTask *task, NSError *error) {
[delegate requestWithReference:requestReference didFailWithError:error]; }];
这是 Swift 中转换后的代码:
var requestReference = self.operation(method, url: url, parameters: parameters, headers: headers, success: {(_ task: URLSessionDataTask, _ responseObject: Any) -> Void in
var error = Error(sessionTask: task, responseObject: responseObject)
if error {
print("error - \(error)")
delegate.request(with: requestReference, didFinishWithBusinessError: error)
}
else {
var responseModel: Any!
if modelClass && responseObject {
if (responseObject is [AnyHashable: Any]) {
// if response is a dictionary, create model out of it
do {
responseModel = try modelClass.object(fromDictionary: responseObject)
}
catch {
}
}
else if (responseObject is [Any]) {
}
}
}
}, failure: {(_ task: URLSessionDataTask, _ error: Error) -> Void in
delegate.request(with: requestReference, didFailWithError: error)
})
我已经转换并提出了这段代码。
这段代码一切正常
但我收到错误:
“在其自身初始值内使用的变量”
Swift 编译器非常严格,会检查每个变量是否具有
使用前定义的值。编译器
不知道在你的情况下,闭包只会被执行after the requestReference
变量被定义。
在这种情况下,您可以使用隐式展开选修的:
var requestReference: String!
requestReference = self.operation(..., success: {(_ task: URLSessionDataTask, _ responseObject: Any) -> Void in
// ...
delegate.request(with: requestReference, didFinishWithBusinessError: error)
}, failure: {(_ task: URLSessionDataTask, _ error: Error) -> Void in
delegate.request(with: requestReference, didFailWithError: error)
})
隐式解包的可选是对编译器的承诺:
该变量没有值now,但当它被使用时它就会产生价值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)