У меня есть семейство абстрактных классов, которые я хочу реализовать для выполнения задачи в зависимости от созданного экземпляра. Но когда я пытаюсь вызвать метод, используя переменную, объявленную как базовый класс, я получаю «Статический член «…» не может использоваться в экземпляре типа «…»».
некоторые части кода выглядят так
class BaseClass{
class func theTask(){
print("do nothing")
}
}
class SubClassA: BaseClass{
class func theTask(){
print("do class A task")
}
}
class SubClassB: BaseClass{
class func theTask(){
print("do class B task")
}
}
Переменная объявлена как свойство одного из моих viewController'ов,
class SecondViewController: UIViewController {
var theObject: BaseClass = BaseClass()
override func viewDidLoad() {
super.viewDidLoad()
if(mysettings.selectedPort ==1){
theObject = SubClassA()
}else{
theObject = SubClassB()
}
configureUIElements()
}
@IBAction func scanButtonPressed(_ sender: Any) {
let devices = self.theObject.theTask()
}
}
Строка, которая говорит
let devices = self.theObject.theTask()
Это тот, который дает мне ошибку. Статический член «theTask» не может использоваться в экземпляре типа «BaseClass».
Я пришел с C++, так что этот тип кодирования очень распространен, но Swift, кажется, не любит его.