2015-01-30 2 views
3

Я прибегая к помощи некоторое время, и каждый урок научил меня, что для создания массива, вы просто сделать следующее:Зачем нужны скобки в конце объявления массива в swift?

var persons = [String] 

Но я двигаюсь от быстрого кода IOS обучения разработки материалов и везде сейчас

var persons = [String]() 

Зачем нам нужны эти брекеты в конце?

ответ

5

Кажется, что вы смешиваете 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

+1

Я думал, что var shoppingList: [String] = [«Яйца», «Молоко»] было достаточно, чтобы инициализировать его быстро. Но, как это делает apple guide, вы можете создать пустой массив определенного типа (без установки каких-либо начальных значений) с использованием синтаксиса инициализатора: var someInts = [Int]() Я правильно понимаю, что вам нужны только эти фигурные скобки при инициализации пустого массива, а не в том, где вы заполняете массив во время объявления/инициализации, например, в var shoppingList: [String] = ["Яйца", "Молоко"] –

+0

Правильно - «объявление» - это 'var name: [ TypeInTheArray] '. Он использует только двоеточие «:». Оператор присваивания «=» фактически устанавливает переменную с левой стороны в выражение с правой стороны. В вашем примере вы можете даже оставить часть ': [String]', потому что Swift может использовать вывод Type для определения того, какой тип содержит массив. Очевидно, что «Яйца» - это String, поэтому вы можете просто сказать «var shoppingList = [« Яйца »,« Молоко »].« Вы устанавливаете его равным заполненному синтаксису Array w/literal, который позволяет пропустить инициализацию пустым массивом с '[String]()' и затем заполнить его. – mc01

+0

Да, я знал о типе вывода, но скобки путали меня, поскольку я был незнаком с синтаксисом. Большое спасибо –

3

[String] - это название типа в Свифт. В частности, это тип Array<String>, который является параметризованной версией общего типа Array<T>. Точно так же, как заявление var number = Int не имеет никакого смысла, если вы явно не сообщите компилятору, что вы создаете экземпляр определенного типа.

Вы хотите либо var persons = [String](), либо, если вы хотите указать начальное значение переменной с литералом массива, вы можете сделать var persons: [String] = []. Обратите внимание, что во втором параметре мы вынуждены указывать тип нашей переменной, поскольку вывод типа Swift не может определить тип пустого массива (какие значения имеет значение []?).

Смежные вопросы