2017-01-02 5 views
2

мы можем создать пустой массив так:почему мы должны добавить(), когда мы создаем пустой массив

var newArray1 = [Int]() 

Я имею в виду: что «()» означает здесь, когда мы создаем новый массив, почему дон «т мы просто создаем новый пустой массив, написав это:

var newArray2 = [Int] 

Я знаю, что это синтаксис, но может кто-нибудь объяснить это немного, чтобы помочь мне понять это глубоко.

+0

Другой способ создания пустого массива - указать тип и затем инициализировать его пустым литералом массива: 'var newArray1: [Int] = []'. – vacawama

+0

Вы также можете использовать 'var newArray1 = [] как [Int]'. – vacawama

+0

@vacawama Не надо. Это слишком сложно. – Alexander

ответ

5

Чтобы создать новый массив, вы должны использовать Array<Int>.init(). Сокращение для вызова инициализаторов - это просто сбросить .init: Array<Int>().

[Int] - короткая рука для Array<Int>.

Вводя вместе, мы можем написать Array<Int>.init() как [Int]().

+0

Как понять разницу между« var b: [Int] = Array() »и« var c: [Int] = [] " , почему мы можем изменить «Array()» на «[]» – user7341005

+0

Поскольку вы указали тип с аннотацией типа ': [Int]', компилятор может сделать вывод, что '[]' - это пустой литерал массива, который не содержит 'Int's – Alexander

+0

, откуда вы все это знаете? Можете ли вы сослаться на некоторые документы для меня? – user7341005

2

Разница заключается в том, что [Int] объявляет тип (массив целых чисел), а [Int]() - это вызов инициализатора того же типа. Это две принципиально разные операции. В частности. Scala они могут быть написаны таким же образом (как scala позволяет опустить скобки для методов без параметров), но в Swift это недопустимо.

+0

'... = [Int]' не объявляет * тип. Это не декларация, это назначение. Если что-либо, присвоение типа потребует '... = [Int] .self' – Alexander

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