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

Swift

Войти
Регистрация
Восстановить пароль
 
Pro2005
44 / 44 / 3
Регистрация: 27.05.2013
Сообщений: 163
#1

Swift dictionary extension - Swift

08.05.2015, 10:27. Просмотров 798. Ответов 0

Помогите разобраться с таким вопросом. У меня была категория для 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 is open source! - Swift
Всем привет! Примерно час назад Swift выпустили в открытое плавание! :yahoo: https://swift.org/ https://github.com/apple/ Что бы...

Конвертер из swift в ObjC - Swift
Уважаемые коллеги Не может ли кто-то из вас подсказать, существует ли &quot;в природе&quot; опенсорсный конвертер исходного кода из swift в...

Мутирование массива - Swift - Swift
Доброго времени суток! Столкнулся с проблемой, которую уже 3й день не могу решить: Я отправляю запрос на сервер, и получаю данные,...

Сильная связь Swift - Swift
Дорогие форумчане, объясните, пожалуйста, в чем разница между строчками &quot;pers!.apartment = apart&quot; и &quot;pers?.apartment = apart&quot;. Единственное...

Input/output в swift - Swift
Начал изучать swift и столкнулся с проблемой ввода значений с клавиатуры. Много чего облазил, но решение нашёл пока только одно, описать...

Swift Казалось бы просто - Swift
Пытаюсь в xcode сделать примитивную игру. Суть в том что бы на экране появлялась сначала 1 кнопка и давалось 2 секунды на нажатие, если...

Перевести код с as3 на swift? - Swift
Приветствую, помогите пожалуйста перевести этот цикл созданный в as3 на swift смысл цикла заключается в следующем создаем новый...

Хочу пойти на курсы SWIFT - Swift
Добрый день, вот хочу пойти на курсы SWIFT , нашел вот эти http://www.specialist.ru/dictionary/definition/swift подскажите может кто...

Визуальная часть в Xcode with Swift - Swift
подскажите идеи реализации такого таб бара в SWIFT: 1 - что бы были такие вкладки 2 - что бы изображения имели реальный цвет а не цвет...

Аналог [object class] в Swift - Swift
Всем добрый день. Наконец-то дошли руки до знакомства с RESTKit, и решил сразу попробовать это дело на Swift, чтобы сразу двух зайцев....

Swift почему else if не находит условие - Swift
-по таймеру происходит установка backgrounda из массива (тип String) (все отрабатывает нормально) -необходимо или по индексу массива...

Цикл for / массив в языке Swift - Swift
Я толко начала изучать Swift и при написания простого приложения &quot;Генератор случайных чисел&quot; столкнулась с такой проблемой: когда...


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

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

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