2016-01-29 4 views
4

Я новичок в прошивкой и Swift программирования, я пытаюсь сделать метод для разбора JSON объектсинтаксического анализа объекта JSON в быстром 2

Мой JSON выглядит следующим образом

{ 
status : true; 
data :[ 
    "url" : "", 
    "startDate" : "", 
    "endDate" : "", 
... 
] 
} 

мой код в Свифт как этот фонд импорта

class SplashResponse { 

    let STATUS    = "status"; 
    let DATA    = "data"; 

    let URL     = "Url" 
    let CONTACT_NO   = "ContactNo"; 
    let SPLASH_IMAGE  = "SplashImage"; 
    let SPLASH_ID   = "SplashId"; 
    let TITLE    = "Title"; 
    let NO_VIEW    = "NoView"; 
    let IS_ACTIVE   = "isActive"; 
    let START_DATE   = "StartDate"; 
    let END_DATE   = "EndDate"; 


    var status : Bool 

    var url : String 
    var contactNo : String 
    var splashImage : String 
    var splashId : Int 
    var title : String 
    var numOfViews : Int 
    var isActive : Bool 
    var startDate : String 
    var endDate : String 

    init(data : NSDictionary){ 

     status  = data[STATUS] as! Bool; 

     if (status == true) { 

      if let item = data[DATA] as? [String: AnyObject] { 

       url   = item[URL] as! String; 
       contactNo = item[CONTACT_NO] as! String; 
       splashImage = item[SPLASH_IMAGE] as! String; 
       splashId = item[SPLASH_ID] as! Int; 
       title  = item[TITLE] as! String; 
       numOfViews = item[NO_VIEW] as! Int; 
       isActive = item[IS_ACTIVE] as! Bool; 
       startDate = item[START_DATE] as! String; 
       endDate  = item[END_DATE] as! String; 

      } 
     } else { 

      url = ""; 
      contactNo = ""; 
      splashImage = ""; 
      splashId = -1; 
      title = ""; 
      numOfViews = -1; 
      isActive = false; 
      startDate = ""; 
      endDate = ""; 
     } 
    } 
} 

Я получаю ниже ошибки

Return from initializer without initializing all stored properties 
+0

Исправить значения констант для имен переменных в json, объявленных в классе. Переменная Json - 'url', но константа valkue -' Url'. Сначала исправьте его и повторите попытку и сообщите нам, как это происходит. Это относится ко всем другим переменным JSON, чтобы убедиться, что они все такие же, как константа. – pratikpawar

ответ

1

Ваш вопрос в том, что компилятор не знал, как инициализировать значения, если условие if let item = ... терпит неудачу.

У вас есть два варианта покрытия для условия status, но внутри ветки true вы создаете новое условие, которое не имеет никакой ветви, поэтому компилятор справедливо жалуется на неинициализированные хранимые свойства.

Мое предложение состоит в том, чтобы сначала безопасно разворачивал data[DATA], не создавая новую область действия, затем используйте значения.

0

Сообщение об ошибке достаточно ясно,

Возвращение из инициализаторе без инициализации все свойств хранимых

и ясно все ваши свойства сохраняются свойства.

Таким образом, вам нужно убедиться, что после того, как вы вернули инициализатор, каждый сохраненный объект будет иметь значение. Это может быть либо нуль, либо какое-то значение.

В вашем случае, в первую очередь,

status  = data[STATUS] as! Bool; 

может потерпеть неудачу, таким образом, все остальное не будет выполняться.

Несмотря на то, что status == true может преуспеть, все коды, которые поставляются с этим условием, могут не работать. И это , нарушающее правило, о котором я только что упомянул.

+0

Ваша идея верна, но в этом случае 'status' * принудительно разворачивается *, сообщая компилятору« Клянусь, что будет значение ». Компилятор с удовольствием соблюдает, но, конечно, приложение будет разбиваться во время выполнения, если значение равно нулю. – Moritz