2015-03-15 2 views
0

Есть ли разница между init со значением по умолчанию и вызовом инициализатора удобства? Я пытаюсь выяснить, когда следует использовать удобство вместо init с настройкой по умолчанию.Инициализация с инициализатором инициализации по умолчанию

class Food 
{ 
    var name :String 

    init(name : String = "Unknow") 
    { 
     self.name = name 
    } 
} 

И это:

class Food 
{ 
    var name :String 

    init(name : String) 
    { 
     self.name = name 
    } 

    convenience init() 
    { 
     self.init(name : "Unkow") 
    } 
} 
+0

Интересный вопрос ... Я думаю, что удобство имеет значение, когда вы подклассифицируете, но не имеет никакого различия в вашем примере. При подклассификации существуют правила в том, как наследование работает с назначенными и удобными инициализаторами. –

ответ

1

Удобство инициализатор проще для пользователей класса, чем назначенный инициализаторе со значением по умолчанию, потому что Xcode перечисляет два инициализаторами по автозавершения.

автодополнения для назначенного инициализатора со значением по умолчанию:

Screenshot with a default value

автодополнения для назначенного инициализатора и удобства инициализатора:

Screenshot with a convenience initializer

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

Недостатком инициализатора удобства является, как упоминал Кельвин в своем комментарии, вы не можете использовать инициализатор удобства из инициализатора подкласса.

+0

Хорошо, но это только IDE (Xcode). Как насчет реального преимущества/недостатка? – Radek

+0

Это общая тема о [«Перегрузка по значениям по умолчанию»] (http://programmers.stackexchange.com/questions/152878/overload-or-optional-parameters), где некоторые другие языки используют «необязательный параметр» в качестве термина вместо «значения по умолчанию». (Это отличается от терминов Swift «optional», что означает «nilable».) Быстрая конкретная разница в инициализаторах является подклассом, как упоминал Кельвин. –

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