Поскольку вы даете очень простой объект JSON код, подготовленный для обработки этой модели. Если вам нужны более сложные модели JSON, вам необходимо улучшить этот образец.
Ваш пользовательский объект
class Person : NSObject {
var name : String = ""
var email : String = ""
var password : String = ""
init(JSONString: String) {
super.init()
var error : NSError?
let JSONData = JSONString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
let JSONDictionary: Dictionary = NSJSONSerialization.JSONObjectWithData(JSONData, options: nil, error: &error) as NSDictionary
// Loop
for (key, value) in JSONDictionary {
let keyName = key as String
let keyValue: String = value as String
// If property exists
if (self.respondsToSelector(NSSelectorFromString(keyName))) {
self.setValue(keyValue, forKey: keyName)
}
}
// Or you can do it with using
// self.setValuesForKeysWithDictionary(JSONDictionary)
// instead of loop method above
}
}
И так вы вызываете свой собственный класс с помощью строки JSON.
override func viewDidLoad() {
super.viewDidLoad()
let jsonString = "{ \"name\":\"myUser\", \"email\":\"user@example.com\", \"password\":\"passwordHash\" }"
var aPerson : Person = Person(JSONString: jsonString)
println(aPerson.name) // Output is "myUser"
}
Идеально, Вы не должны изменять свои интерфейсы очень часто (если вообще). Если действительно необходимо изменить интерфейс, необходимо пересмотреть его цель и видеть, относится ли настоящее имя все еще к нему.
Если Вы все еще чувствуете, что интерфейсы изменятся, и изменения интерфейсов являются небольшими (добавляющие объекты), и Вы имеете контроль над целой кодовой базой, то необходимо просто изменить интерфейс и зафиксировать все ошибки компиляции.
Если Ваше изменение является изменением в том, как интерфейс должен использоваться, то необходимо создать отдельный интерфейс (скорее всего, с другим именем) для поддержки того альтернативного шаблона использования.
Даже если Вы закончите тем, что создали ISomething, ISomething2 и ISomething3, то потребителям Ваших интерфейсов будет нелегко выяснять то, что различия между интерфейсами. Когда они должны использовать ISomething2 и когда они должны использовать ISomething3? Затем необходимо пойти о процессе obsoleting ISomething и ISomething2.
Я соглашаюсь с Garo Yeriazarian, изменение интерфейса является серьезным решением. Кроме того, если Вы хотите способствовать использованию новой версии интерфейса, необходимо отметить старую версию как устаревшую. В.NET можно добавить ObsoleteAttribute.
Я думаю, что Вы злоупотребляете интерфейсы.
Meyer и Martin сказали нам: "Открытый для расширения, но закрытый для модификации!"
и затем Cwalina (и др.) повторил:
Из руководства по проектированию платформы...
В целом классы являются предпочтительной конструкцией для представления абстракций. Основной недостаток интерфейсов состоит в том, что они намного менее гибки, чем классы когда дело доходит до обеспечения эволюции API. После того как Вы поставляете интерфейс, группа его участников фиксируется навсегда. Любые дополнения к интерфейсу повредили бы существующие типы, реализовав интерфейс.
Класс предлагает намного больше гибкости. Можно добавить участников к классам, которые уже поставлялись. Пока метод не абстрактен (т.е., пока Вы обеспечиваете реализацию по умолчанию метода), любые существующие производные классы продолжают функционировать неизменные.
Цель интерфейса состоит в том, чтобы определить абстрактный шаблон, который в типе должен реализовать.
Это была бы лучшая реализация как:
public interface ISomething
public class Something1 : ISomething
public class Something2 : ISomething
Вы ничего не получаете в форме возможности многократного использования кода или масштабируемого дизайна путем создания нескольких версий того же интерфейса.
Я не знаю почему люди downvote Ваше сообщение. Я думаю, что хорошие рекомендации по именованию очень важны.
Если необходимо поддержать совместимость с предыдущей версией того же интерфейса, рассматривают использование наследования. Если необходимо представить новую версию интерфейса, рассматривают следующее правило:
Попытайтесь добавить значимый суффикс к Вам интерфейс. Если не возможно создать краткое имя, рассмотрите добавляющий номер версии.