2015-01-02 5 views
2

Я попытался искать вокруг для того, что эторазница между [] и []() в быстрой

[]() 

Но я не совсем уверен. В детской площадке, я сделал это:

var test = [Int](); 
test.append(1); 
test.append(2); 

Если я уйду выключить() и сделать

var test = [Int]; 
test.append(1); 
test.append(2); 

Он по-прежнему выглядит как массив Ints для меня. Может кто-то объяснить разницу? Заранее спасибо.

ответ

4

Type() означает «звонок init()» - т. Е. Сделать новый экземпляр Type.

[Int] это тип, например String. [Int] означает «массив-Int».

String() делает новый пустой экземпляр String. [Int]() создает новый пустой экземпляр массива-Int.

Вы можете объявить переменную как тип array-of-Int. Или вы можете создать и назначить новый экземпляр array-of-Int. Вот что вы здесь делаете:

var test = [Int]() 

Но вы не можете присвоить тип переменной без дальнейшего синтаксиса. Таким образом, это незаконно:

var test = [Int] 

EXTRA для специалистов

Вам можно сказать:

var test = [Int].self 

Это делает присвоить тип переменной! Это вряд ли будет тем, что вы хотите здесь, потому что теперь у вас нет массива; у вас есть тип, сам, как объект !!

+6

И прекратите использовать точки с запятой. :) – matt

+1

Я бы также добавил, что '[]' является литералом массива для пустого массива i.e. 'var test: [Int] = []' инициализирует 'test' как пустой массив. 'var test: [Int] = [1]' инициализирует 'test' как массив с одной записью,' var test: [Int] = [1,2] 'массив с двумя записями и т. д. Когда вы инициализируетесь с помощью некоторые записи, Swift может «вывести» тип, поэтому вы можете написать 'var test = [1,2]' без типа, потому что он может видеть, что массив содержит 'Int' (тип по умолчанию для целых литералов). Но когда вы объявляете пустой массив, вы должны указать тип, поскольку у Swift больше ничего не остается. –

+0

В некоторых контекстах (например, последний аргумент для вызова функции) тип может использоваться как значение без дальнейшего синтаксиса – newacct

0

[Type] является синтаксический Array<Type>, поэтому он представляет собой тип массива, который является родовой структурой, и для которого вы можете указать тип элементов он держит (Int в данном примере)

Таким образом, разница между:

[Int] 

и

[Int]() 

такая же, как для

Array<Int> 

и

Array<Int>() 

Первый это просто тип, который можно использовать при объявлении переменной или параметра функции.

Второй вызывает конструктор без параметров в этом типе, т. Е. Создает экземпляр этого типа.

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