#arrays #swift
#массивы #swift
Вопрос:
В objective c легко создать гетерогенный массив, подобный этому:
NSArray *myArray = @["String1", "String2", 123, 456];
Есть ли какой-либо способ создать такой массив в swift?
Если да, то как?
Примечание: Я пробовал аналогичную инструкцию в swift —
var arr = ["string1", "string2", 123, 456]
но это выдает ошибку компиляции:
Playground execution failed: error: <REPL>:124:17: error: cannot convert the expression's type 'Array' to type 'IntegerLiteralConvertible'
var arr : Any = ["string1", "string2", 123, 456]
Ответ №1:
Да, вы также можете сделать это в Swift.
var arr: Array<Any> = ["string1", "string2", 123, 456]
Массив типа Any
может содержать строки, целые числа и другие объекты и структуры.
Комментарии:
1. Я пробовал это в playground, но получаю сообщение об ошибке: Сбой выполнения Playground: ошибка: <REPL>:124:11: ошибка: не удается преобразовать тип выражения ‘Array’ в тип ‘ArrayLiteralConvertible’ var arr = [«string1», «string2», 123, 456] Есть идеи?
2. это должно сработать, если вы явно введете его. Я только что отредактировал свой ответ
3. Стоит упомянуть, что каждый раз, когда вы видите «это не работает в playground», это не обязательно означает, что это не работает в Swift. Игровая площадка на данный момент находится в стадии бета-тестирования, и у нее есть свои проблемы.
4. Насколько я понимаю, проблема в том, что строки в Swift не могут иметь значение
nil
, ноAnyObject
snil
могут.Any
s, с другой стороны, не обязательно должны бытьnil
доступны. Это фундаментальная причина?