2015-09-19 2 views
3

Я обновил свой проект Xcode 6.4 в Xcode 7 и имеет эту проблему ...Нельзя присвоить значение типа «MDLMaterialProperty ?!» к значению типа «Int»

class func preparationForSave(text_country: NSDictionary){ 
    let dataArray = text_country["countries"] as! NSArray; 

    for item in dataArray { 
     var it: Int = 0 
     if (item["parentId"] == NSNull()){ 
      it = 0 
     }else{ 
      it = item["parentId"] 
     } 
     Country.saveCountry(item["id"] as! Int, title: item["title"] as! String, parentId: it) 
    } 
} 

имеет ошибку здесь: item["id"] as! Int и говорит: Невозможно присвоить значение тип «MDLMaterialProperty ?!» к значению типа «Int»

Он работал на Xcode 6.4 ...

ответ

1

Это странная ошибка в XCode 7, который вызывает ошибку о «MDLMaterialProperty ?!» чтобы всплывать, когда типы несоответствия или переменные не были развернуты.

Попробуйте этот код (фиксируется в 2-х линий):

class A { 
    class func preparationForSave(text_country: NSDictionary){ 
     let dataArray = text_country["countries"] as! NSArray; 

     for item in dataArray { 
      var it: Int = 0 
      if (item["parentId"] == nil) { // item["parentId"] is of type X? - compare it with nil 
       it = 0 
      }else{ 
       it = item["parentId"] as! Int // note that we're force converting to Int (might cause runtime error), better use: if it = item["parentId"] as? Int { ....} else { .. handle error .. } 
      } 
      Country.saveCountry(item["id"] as! Int, title: item["title"] as! String, parentId: it) 
     } 
    } 
} 
+1

Хороший ответ! Кроме того, вы можете столкнуться с этим, когда у вас сложная иерархия объектов. Вы должны вызывать и делать каждый шаг в дереве. Если вы попытаетесь получить причудливые и комбинированные линии, он будет бросать ту же ошибку и терпеть неудачу каждый раз. т. е. если buh ["foo"]! ["bar"]! в виде? NSDictionary .. выкинет ошибку. поэтому вам нужно объявить переменные для каждого шага на этом пути ... Lame. Только видеть это в 7.2. –

Смежные вопросы