Ошибка приведения типа Swift 3

#ios #swift #swift3

#iOS #swift #swift3

Вопрос:

У меня этот код отлично работает в Swift 2.2

 let arrayNib = Bundle.main.loadNibNamed("VehicleDetailsTableViewCell", owner: nil, options: nil) as! NSArray
  

В то время как в swift 3.0 код выдает ошибку

Не удается преобразовать значение [Any]? чтобы ввести NSArray в принуждении

Комментарии:

1. Дружественное примечание: это Swift. Вместо NSArray следует использовать массив Swift.

Ответ №1:

попробуйте это

 let arrayNib = Bundle.main.loadNibNamed("VehicleDetailsTableViewCell", owner: nil, options: nil)! as [Any]
print (arrayNib)
  

Ответ №2:

Я могу использовать его как

 let arrayNib = Bundle.main.loadNibNamed("VehicleDetailsTableViewCell", owner: nil, options: nil)
  

Это дает мне массив [Любой?].

Ответ №3:

Ошибка довольно явная.

Вы пытаетесь преобразовать Optional<T> , чтобы сказать U .

В то время T как можно преобразовать в U , Optional<T> это не так.

Если вы хотите, вы можете выполнить приведение Optional<T> Optional<U> . Как и в вашем случае [Any]? NSArray? .

Но я настоятельно рекомендую использовать Swift array и добавить несколько реальных типов.

Ответ №4:

Похоже, в Swift появился новый тип массива, который используется в новых API; вот что говорит игровая площадка:

введите описание изображения здесь

Я предполагаю, что последующий вопрос заключается в том, необходимо ли использовать NSArray.