Как объявить "защищенную" переменную в быстрой
Я хочу создать класс, который наследуется от другого класса, который находится в другом файле.
Например:
Class1.swift
class Class1
{
protected var
//Do Stuff
}
Class2.swift
class Class2:Class1
{
//Do stuff
}
Как бы мне было легко получить доступ к "защищенной" переменной/функции в swift?
Когда я объявляю приватную переменную/функцию, я могу использовать ее только в этом классе. Если я использую "fileprivate", мой другой класс должен быть в файле сохранения как Class1. То, что я хочу сделать, это сохранить мои классы в файлах seporate и использовать группы из Xcode, чтобы узнать, какой класс принадлежит какой категории.
Ответы
Ответ 1
Вам нужно будет использовать internal
для этого, поскольку Swift не предлагает ключевое слово protected
(в отличие от многих других языков программирования). internal
- единственный модификатор доступа между fileprivate
и public
:
Внутренний доступ позволяет сущности использоваться в любом исходном файле от их определяющего модуля, но не в каком-либо исходном файле за пределами этого модуль. Обычно вы используете внутренний доступ при определении приложений или структуры внутренней структуры.
Существует сообщение в блоге, в котором объясняется немного больше о том, почему языковые дизайнеры решили не предлагать ключевое слово protected
(или что-то еще) эквивалент).
Некоторые из причин:
Он действительно не предлагает никакой реальной защиты, поскольку подкласс может всегда выставляйте "защищенный" API через новый публичный метод или свойство.
а также тот факт, что protected
может вызвать проблемы при расширении, поскольку неясно, должны ли расширения иметь доступ к свойствам protected
или нет.
Ответ 2
Даже если Swift не предоставляет доступ protected
, мы можем добиться аналогичного доступа, используя управление доступом t21 > .
Единственное, что нам нужно иметь в виду, что мы должны объявить все дети в том же файле, что и родитель, объявленный в.
Animal.swift
import Foundation
class Animal {
fileprivate var protectedVar: Int = 0
}
class Dog: Animal {
func doSomething() {
protectedVar = 1
}
}
OtherFile.swift
let dog = Dog()
dog.doSomething()