2014-11-25 3 views
1

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

Но я попытался инициализировать массив с различными типами, и компилятор не дал никаких ошибок и может справиться с массивом без каких-либо проблем !!! Может ли кто-нибудь объяснить мне, что происходит?

enter image description here

ответ

1

Поскольку Swift компилятор достаточно умен, чтобы вывести ближайший общий подтип массива инициализаторов выражений, ваш массив типа элемента заканчивается NSObject.

Вот quote from the Swift book:

Окончательный фрагмент кода создает постоянный массив с именем библиотеки, которая содержит два экземпляра Movie и три Песни экземпляров. Тип массива библиотек выводится путем инициализации его содержимым литерала массива. Тип проверки Свифта может вывести, что фильм и песни имеют общий суперкласс MediaItem, и поэтому он выводит тип [MediaItem] для библиотеки массива:

let library = [ 
Movie(name: "Casablanca", director: "Michael Curtiz"), 
Song(name: "Blue Suede Shoes", artist: "Elvis Presley"), 
Movie(name: "Citizen Kane", director: "Orson Welles"), 
Song(name: "The One And Only", artist: "Chesney Hawkes"), 
Song(name: "Never Gonna Give You Up", artist: "Rick Astley") 
] 
Смежные вопросы