Форум программистов, компьютерный форум, киберфорум
Наши страницы

Swift

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

Swift dictionary extension - Swift

08.05.2015, 10:27. Просмотров 842. Ответов 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 ""
    }
    
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2015, 10:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Swift dictionary extension (Swift):

Как достать dictionary из dictionary? - Программирование iOS
Подскажите пожалуйста как получить значение dictionary который находится внутри другого dictionary? Я не понимаю как обратиться к нему. ...

Swift и бд - Swift
Для курсовой в универе хочу написать простое приложение, которое будет добавлять данные в бд и наоборот читать их. Но хотелось бы, чтобы бд...

Swift, what that? - Swift
Напишите мне, пожалуйста доступным языком, что такое свифт.

Swift for Windows - Swift
Здравствуйте, я хочу научиться SWIFT, есть ли SWIFT СТУДИЯ установить на Windows, подобное как Visual Studio для разработки C ++ или...

Документация SWIFT - Swift
Здравствуйте. Не могли бы вы в эту тему накидать документации, особенностей и полезной инфы про Swift. Стоит ли переходить на него из...

Массив Swift - Swift
Есть кусок кода Swift в Xcode: var pageData = NSArray() override init() { super.init() // Create the...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.05.2015, 10:27
Привет! Вот еще темы с ответами:

Swift и MySQL - Swift
Здравствуйте, пишу приложение для удаленной загрузки данных на веб-сервер. Возникла непонятная проблема. Данные приходят с сервера, но...

VK SDK swift - Программирование iOS
Подскажите пожалуйста, как можно подключить VK SDK к проекту на swift. Легко ли это вообще сделать ? И если есть какие-то примеры работы на...

Кнопка в Swift - Swift
Друзья, как сделать круглую кнопку и как сделать так, чтобы при ее нажатии цвет этой кнопки рандомно менялся?

Потоки в Swift - Swift
В общем, решил поковырять свифт на выходных и выяснил, что не могу нормально создавать потоки. То есть создать-то я их могу, а вот...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

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