Преобразование mutableCopy в Swift
Я нашел это руководство чтобы получить тело HTTP, witch содержит сообщение об ошибке в формате JSON с AFNetworking 2. Руководство находится в Objective-C, и я тоже стараюсь изо всех сил преобразовать его в Swift.
вот код, который я пытаюсь преобразовать в Swift:
- (id)responseObjectForResponse:(NSURLResponse *)response
data:(NSData *)data
error:(NSError *__autoreleasing *)error {
if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) {
if (*error != nil) {
NSMutableDictionary *userInfo = [(*error).userInfo mutableCopy];
NSError *jsonError;
// parse to json
id json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&jsonError];
// store the value in userInfo if JSON has no error
if (jsonError == nil) userInfo[JSONResponseSerializerWithDataKey] = json;
NSError *newError = [NSError errorWithDomain:(*error).domain code:(*error).code userInfo:userInfo];
(*error) = newError;
}
return (nil);
}
return ([super responseObjectForResponse:response data:data error:error]);
}
более конкретно, в этой части есть проблема:
NSMutableDictionary *userInfo = [(*error).userInfo mutableCopy];
Это мой текущий код:
class JSONResponseSerializerWithData: AFJSONResponseSerializer {
let JSONResponseSerializerWithDataKey: NSString = "JSONResponseSerializerWithDataKey"
override func responseObjectForResponse(response: NSURLResponse!,
data: NSData!,
error: NSErrorPointer) -> AnyObject? {
if(!self.validateResponse(response as NSHTTPURLResponse, data: data, error: error)) {
if(error != nil) {
// The question.....
var jsonError: NSError
// parse to json
// Missing some returns with AnyObejct...
}
return nil
}
}
}
как преобразовать эту строку в Swift? Я совсем новичок в язык Swift / Objective-C, поэтому для него может быть простое решение, но я еще не смог его найти.
2 ответов
Я нашел то же руководство, которое описывает как разобрать сообщение об ошибке в AFNetworking 2 и вот моя реализация в Swift:
override func responseObjectForResponse(response: NSURLResponse!, data: NSData!, error: NSErrorPointer) -> AnyObject! {
if !self.validateResponse(response as! NSHTTPURLResponse, data: data, error: error) {
if error != nil {
var userInfo = error.memory!.userInfo!
var jsonError:NSError?
let json: AnyObject? = NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments, error: &jsonError)
userInfo[JSONResponseSerializerWithDataKey] = json;
error.memory = NSError(domain: error.memory!.domain, code: error.memory!.code, userInfo: userInfo)
}
return nil
}
return super.responseObjectForResponse(response, data: data, error: error)
}
надеюсь, что это поможет кому-то.