2016-03-11 3 views
5

Я видел ряд ссылок на использование private init в Swift ограничить строительство объекта (например, this), но это не представляется возможным, когда я пытаюсь (в Xcode 7.2.1 Playground):Нет больше `private init` в Swift?

class C { 
    private init() {} 
} 

var c = C() // No errors. 

Am Я что-то пропустил или это на самом деле ошибка?

+0

Не уверен, но я считаю, если ваш класс подклассифицирован из 'NSObject', то он может ** аннулировать ** инициализацию' private' и разрешить больше экземпляров. – Honey

+0

Нет, это просто «личное пространство для файлов» в Swift 2. В Swift 3 есть два разных уровня доступа: теперь true 'private' и этот старый' fileprivate'. – werediver

+0

Что я знаю. Я указывал на это как на * другую * причину – Honey

ответ

11

Вероятно, вы ожидаете, что private ограничит использование в определении класса, но это не то, что он делает.

Определение private заключается в том, чтобы «ограничить использование сущности своим собственным определяющим исходным файлом».

Из книги Быстро, "Access Control" глава.

EDIT:

Как Свифт 3 fileprivate делает то, что private привык и private теперь более ограничительный характер в том, что он «ограничивает использование объекта к объявлению ограждающего»

+0

Абсолютно правильно (я тоже нашел ответ). Спасибо за ваши усилия. – werediver

+2

Кажется, это было изменено для Swift 3.0. Язык теперь имеет термин 'fileprivate', означающий« ограниченным исходным файлом », а« private »теперь означает« ограниченным включением определения », как следует. – TheSoundDefense

+0

@MikePollard, что сказал TheSoundDefense, это правда ... Вы можете отредактировать свой ответ. – Whirlwind

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