В коде Swift, поскольку массив принимает AnyObject, если мы даем Interger и Double, он принимает значение Double, почему?

Случай 1:

Код Swift принимает приведенный ниже оператор как AnyObject var array = [1, 1.0, "String"]

вывод для массива: [1, 1.0, "String"]

case2:

Но он не принимает приведенный ниже код для AnyObject и предполагает его как все двойники, почему var any_object = [1, 2.0, 222222222.888888]

вывод для любого_объекта: [1.0, 2.0, 222222222.0]

Почему функциональность меняется с case1 на case2? Может ли кто-нибудь прояснить мои сомнения.


person uday kaja    schedule 26.01.2015    source источник


Ответы (1)


Первый случай должен быть AnyObject, потому что есть как числовые типы данных, так и строка. Во втором случае используется наиболее точная форма числового типа данных (в данном случае Double), которую можно вывести из значений.

Если вы хотите AnyObject во втором случае, вы можете указать этот тип в определении:

var any_object: [AnyObject] = [1, 2.0, 222222222.888888]
person bjtitus    schedule 26.01.2015
comment
Если я не укажу тип данных как быстрый код AnyObject, он должен сделать вывод, что у меня разные типы данных - person uday kaja; 27.01.2015
comment
Я не уверен, что вы говорите. Swift выводит тип данных на основе элементов, которые вы предоставляете при инициализации, если вы не указываете тип. Если бы у вас был массив строк [String1, String2, String3], разве вы не хотели бы, чтобы он выводил тип как Array‹String›? Swift является строго типизированным языком и должен побуждать вас использовать правильный тип, когда это возможно, что и делает вывод типа. Для Swift не имеет смысла предполагать, что вы будете хранить строку в массиве, если вы только инициализировали ее целыми числами. Это также помогает с распределением памяти. - person bjtitus; 27.01.2015
comment
Похоже, вам нужно больше узнать о выводе типов, если вы все еще не уверены в этом: en.wikipedia.org /wiki/Тип_inference - person bjtitus; 27.01.2015
comment
Извините, мне не совсем понятен комментарий, данный мной. Если у меня есть массив, состоящий из значений Int и Double (т.е. var array = [2, 345]), swift принимает его как массив с двойным значением, почему это происходит? - person uday kaja; 27.01.2015
comment
Значения 2 и 345 сами по себе не имеют определенного типа. Вы можете увидеть это, если создадите переменную Double и попробуете установить для нее значение 2, если бы 2 было только Int, это не сработало бы. Точно так же, если бы вам приходилось указывать полное значение Double каждый раз, когда вы хотите получить значение Double, простого ввода 345 будет недостаточно, вам потребуется гораздо больше значащих цифр. - person bjtitus; 27.01.2015