Массив со строкой и числом

#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 s nil могут. Any s, с другой стороны, не обязательно должны быть nil доступны. Это фундаментальная причина?