Преобразование 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)
    }

надеюсь, что это поможет кому-то.


Я думаю, что это следует сделать трюк:

var userInfo = error.userInfo