2015-08-13 2 views

ответ

2

Насколько я знаю, нет никакой эффективной разницы.

С первым утверждением вы используете функцию вывода типа Swift. Вы создаете экземпляр класса и из назначения этого экземпляра в var компилятор вводит тип.

Во втором заявлении вы явно определяете тип list. Назначение с правой стороны знака равенства теперь создает пустой Swift Array, но из-за явного типа NSMutableArray он будет передан в этот класс. Права выражение знака равенства делает то же самое, как NSMutableArray() делает, но с помощью [] у вас есть умный сокращенный вариант для создания экземпляра NSMutableArray со значениями, как этот [2,1,4] или [someObject, someOtherObject] и т.д. Благодаря @Neo.

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

Имейте в виду, что NSMutableArray является классом из Foundation Foundation и в основном использовался в контексте Objective-C, тогда как Swift предлагает собственный тип коллекции для такого списка. Они не совпадают, но неявно передаются компилятором.

Надеюсь, это все ясно.

+0

Исправить. И, как объясняет этот ответ, мы должны действительно использовать «Swift version» массива, потому что он лучше интегрирован с языком, он основан на Struct и предлагает дженерики. NSMutableArray принадлежит к прошлому. –

1

Как сказал JulianM, нет никакой разницы ... И объявляем/инстанцировании в NSMutableArray :-)

Единственное «разностной», что есть

var list = NSMutableArray() 

Эта строка кода объявляет список и наследует его тип конкретизированной NSMutableArray ...

var list:NSMutableArray = [] 

Хотя эта строка кода объявляет список AS NSMutableArray и конкретизирует его как NSM utableArray ...

Но это просто разница в записи ... Оба означают то же самое ...

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