Форум программистов, компьютерный форум CyberForum.ru

Swift dictionary extension - Swift

Восстановить пароль Регистрация
 
Pro2005
44 / 44 / 3
Регистрация: 27.05.2013
Сообщений: 163
08.05.2015, 10:27     Swift dictionary extension #1
Помогите разобраться с таким вопросом. У меня была категория для NSDictionary с таким методом
Objective-C
1
2
3
4
5
6
7
8
9
10
11
- (NSString *)jsonString {
    NSError *error;
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:self
                                                       options:NSJSONWritingPrettyPrinted // Pass 0 if you don't care about the readability of the generated string
                                                         error:&error];
    if (error == nil) {
        return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    }
    NSAssert(error, @"error");
    return @"";
}
Сейчас я хочу переписать этот метод исп swift... что я делаю:
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
extension Dictionary {
    
    var JSONString: String {
        var error: NSError?
        var jsonData: NSData? = NSJSONSerialization.dataWithJSONObject(self, options: NSJSONWritingOptions.PrettyPrinted, error: &error)
        if error == nil {
            return NSString(data: jsonData!, encoding: NSUTF8StringEncoding) as! String
        }
        return ""
    }
    
}
Но получаю ошибку: Cannot invoke 'dataWithJSONObject' with an argument list of type '(Dictionary<Key, Value>, optionsNSJSONWrittingOptions, error: inout NSError?)'

Как я понимаю проблема кроется в передачи 'self' в метод dataWithJSONObject
т.к код вида
Objective-C
1
2
var test = ["test":"test"]
        var jsonData: NSData? = NSJSONSerialization.dataWithJSONObject(test, options: NSJSONWritingOptions.PrettyPrinted, error: &error)
проблем не вызывает... Что я упускаю ? Почему мой код не работает... кто-то может мне объяснить

Добавлено через 10 часов 35 минут
Вроде понял в чем причина...
Сигнатура метода dataWithJSONObject is:
Objective-C
1
dataWithJSONObject(obj: AnyObject, options opt: NSJSONWritingOptions, error: NSErrorPointer) -> NSData?
В документации сказано:
"AnyObject can represent an instance of any class type."
Но так как:
"Swift’s String, Array, and Dictionary types are implemented as structures."
Как я понял мне нужно создать Dictionary который совместим с
Objective-C
1
NSDictionary ([NSObject: AnyObject])
Вот что у меня вышло:
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
extension Dictionary {
    
    var JSONString: String {
        var error: NSError?
        var dictionary: [String: AnyObject] = [:]
        
        for (key, value) in self {
            dictionary["\(key)"] = "\(value)"
        }
        
        var jsonData: NSData = NSJSONSerialization.dataWithJSONObject(dictionary, options: NSJSONWritingOptions.PrettyPrinted, error: &error)!
        if error == nil {
            return NSString(data: jsonData, encoding: NSUTF8StringEncoding)! as String
        }
        return ""
    }
    
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2015, 10:27     Swift dictionary extension
Посмотрите здесь:

Документация SWIFT Swift
Восклицательный знак в Swift Swift
Потоки в Swift Swift
Массив Swift Swift
Swift События в Cocoa Swift
Swift Swift, what that?
Swift Казалось бы просто Swift
Swift Swift for Windows
Swift JSON Parsing Swift
Swift Swift и бд
Swift Swift и MySQL
Кнопка в Swift Swift

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему

Метки
dictionary, extension, ios, json, swift
Опции темы

Текущее время: 22:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru