Почему частный недоступен для расширения?

Вот мой файл ViewController.swift:

class ViewController: UIViewController {
    private var myInt = 10
}

extension ViewController {
    func printMyInt() {
        print(myInt)
    }
}

Хотя, как указано в Документация Swift - раздел Уровни доступа:

Частный доступ ограничивает использование объекта в приложении декларации, и расширениям этого объявления, которые находятся в тот же файл. Используйте частный доступ, чтобы скрыть сведения о реализации конкретная часть функциональности, когда эти данные используются только в рамках одной декларации.

Так как Swift 4 выпущен, я предполагаю, что я могу реализовать такую ​​вещь (это также упоминается в: Что нового в Swift - WWDC 2017), однако, мне показалось, что компилятор:

введите описание изображения здесь

'myInt' недоступен из-за уровня защиты 'private'

Это несовместимо с тем, что указано в документации?


Как простое быстрое решение, я могу объявить его как:

fileprivate var myInt = 10

но мне интересно, почему так происходит, я не понимаю, что упоминается в документации? или это ошибка "Xcode" (используется версия 9.0.1)?

Примечание: проект был создан в старшем Xcode 8, а затем перенесен в Xcode 9.

Ответ 1

В Swift 4, private члены доступны для расширений этого объявления, которые находятся в одном файле, см. SE -0169 - Улучшение взаимодействия между частными объявлениями и расширениями.

Если проект был создан в Xcode 8 (с Swift 3), тогда Xcode 9 откроет его в режиме "Swift 3" и установит "Swift Language Version" в "Swift 3.2". Поэтому существуют более строгие ограничения Swift 3.

Чтобы сделать частное расширение видимым для расширения в том же файле, установите для версии Swift версию версии 4 в настройках сборки. (Конечно что может сделать больше изменений в вашем коде.)

Еще лучше, используйте "Edit → Convert → To Current Swift Syntax..."