2015-09-23 4 views
0

Я собираюсь изучить Swift 2 и добрался до главы о arrays. Там я узнал, что оба из следующих дел (по крайней мере то, что я могу видеть) то же самое:Создание массивов

Первый:

var shoppinglist = [String](arrayLiteral: "Eggs", "Milk"); 

Вторая:

var shoppinglist2: [String] = ["Eggs", "Milk"]; 

Что именно разница между этими двумя или нет никакой разницы вообще? Какой из них я должен предпочесть?

ответ

1

Его просто синтаксический сахар, чтобы сделать ваш код менее подробным, вы, как правило, предпочитаете менее подробный код, если только по какой-то причине неясны. Также вы можете удалить аннотацию типа, поскольку она избыточна, так как тип может быть выведен из выражения.

Так идеально:

var shoppinglist = ["Eggs", "Milk"] 
+0

Очистить, спасибо! Я приму этот ответ, как только смогу. – PeterPan

+0

Я могу возразить. Мы хотим, чтобы код был многословным, поскольку многословие обычно делает код более понятным. Но литералы массивов - это случай, когда есть краткий вариант, который на самом деле более ясен. В конечном итоге нам нужна самая ясная версия кода, но если вы сомневаетесь, ошибайтесь на стороне * more * verbose. – nhgrif

2

Там нет функциональной разницы, но вы должны предпочесть второе выражение.

Синтаксис [String] просто сокращение для Array<String>, который говорит, что вы описываете общий тип Array специализированных для хранения String значения.

Однако, это более распространенный и читаемый способ использовать этот сокращенный синтаксис только для описания типа, а не для вызова инициализатора, как вы это делаете в первом примере. Кроме того, нет необходимости вызывать инициализатор, который принимает параметр arrayLiteral. Точка этого параметра должна позволить вам инициализировать массив с литералом, как вы это делаете во втором примере.

Ваш второй пример хорош.

Другим вариантом является просто

var shoppinglist3 = ["Eggs", "Milk"] 

, который опирается на умозаключения типа.

И вам не нужны

запятой
+0

Спасибо за объяснение! Я использую точки с запятой, поэтому я не забуду их, когда пишу код в C. Спасибо! +1 – PeterPan

1

Второй является более распространенным, в этом случае можно исключить: [String], потому что это вытекает из правой строну руки. Они имеют различный синтаксис, но оценивают одно и то же. Первый из них обычно используется при создании либо пустых массивов, либо повторяющихся массивов, таких как:

var empties = [Float]() 
var doubles = [Double](count: 15, repeatedValue: 1.0) 
+0

Благодарим вас за разъяснение! +1 – PeterPan

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