Почему частный недоступен для расширения?
Вот мой файл 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..."