Кажется, что вы смешиваете 2 понятия: объявление переменной и назначение переменной.
К объявить пустой массив в Swift, вы должны явно указать, какие типы могут удерживать массивы. Вы можете сделать это либо с определением долгосрочной руки:
var persons: Array<String>
Или сокращенный синтаксис (предпочтительно):
var persons: [String]
Обратите внимание на использование двоеточия «:» вместо равных «=».
Оба они говорят: «Я объявляю о существовании переменной (не константной), называемой« людьми », которая будет изменчивым массивом, полным строк. Сейчас это не определено».
В Obj-C вы можете поместить любой объект в NSArray, что означает, что вы не можете быть уверены в том, что вы выберете из него. Объявление содержимого массива таким образом является одним из элементов безопасности Swift's Type. Вы можете быть уверены, что persons
будет содержать только String
экземпляров.
Для Назначают значение в переменную, а это означает, что он не просто определение, но и имеет действительный объект, возложенные на него в памяти, вы должны фактически инициализировать массив:
var persons = [String]()
Это, по существу, сокращенный способ инициализации пустого массива, который будет удерживать определенный тип, без передачи каких-либо параметров методу init:. После этого persons
фактически имеет значение, которое является полностью пустым массивом, которому разрешено содержать строки.
В качестве альтернативы, Свифт типа массива имеет 2-ий инициализатор, который позволяет передавать параметры:
init(count: Int, repeatedValue: T)
Вы можете использовать это, чтобы создать массив ж/длиной, а начальных значений:
let immutableBobsArray = Array(count: 3, repeatedValue: "Bob")
println(\(immutableBobsArray)) \\ ["Bob", "Bob", "Bob"]
См. "Collection Types" в руководстве по быстрому программированию Apple, а также the Array entry in the Swift Standard Library
Я думал, что var shoppingList: [String] = [«Яйца», «Молоко»] было достаточно, чтобы инициализировать его быстро. Но, как это делает apple guide, вы можете создать пустой массив определенного типа (без установки каких-либо начальных значений) с использованием синтаксиса инициализатора: var someInts = [Int]() Я правильно понимаю, что вам нужны только эти фигурные скобки при инициализации пустого массива, а не в том, где вы заполняете массив во время объявления/инициализации, например, в var shoppingList: [String] = ["Яйца", "Молоко"] –
Правильно - «объявление» - это 'var name: [ TypeInTheArray] '. Он использует только двоеточие «:». Оператор присваивания «=» фактически устанавливает переменную с левой стороны в выражение с правой стороны. В вашем примере вы можете даже оставить часть ': [String]', потому что Swift может использовать вывод Type для определения того, какой тип содержит массив. Очевидно, что «Яйца» - это String, поэтому вы можете просто сказать «var shoppingList = [« Яйца »,« Молоко »].« Вы устанавливаете его равным заполненному синтаксису Array w/literal, который позволяет пропустить инициализацию пустым массивом с '[String]()' и затем заполнить его. – mc01
Да, я знал о типе вывода, но скобки путали меня, поскольку я был незнаком с синтаксисом. Большое спасибо –