#swift #xcode
#swift #xcode
Вопрос:
Есть ли способ сделать расширение способным получать доступ к частной переменной, определенной в файле определения, но сохранить закрытую функцию расширения закрытой только для этого расширения (не подлежащей оценке в файле определения)?
Например:
class MyClass {
private var myStr = "str"
func doSomething() {
funcA() // <- should cause compiler error
}
}
extension MyClass {
private func funcA() {
print(myStr)
}
}
Таким образом, doSomething() не может вызвать funcA(), но funcA() может получить доступ к myStr.
Комментарии:
1. Я сам не пробовал, но как насчет переноса расширения в другой файл и создания функции
fileprivate
? При этом я лично предпочитаю использовать private перед fileprivate2. @Jessy Спасибо за ваши предложения. Я исправил их в обновлениях.
Ответ №1:
ДА. Поместите определение в один файл, а расширение в другой.
Частный доступ ограничивает использование объекта вложенным объявлением и расширениями этого объявления, которые находятся в том же файле.
Эта информация не совсем полная. Как вы видели, все, что находится private
в расширении, доступно в объявлении и других расширениях. Но только в том же файле.
https://docs.swift.org/swift-book/LanguageGuide/AccessControl.html