Переопределенный метод не вызывается - PullRequest
0 голосов
/ 17 декабря 2018

У меня проблема с тем, что я не могу переопределить функцию.

Мой родительский класс ниже:

class A: UIViewController {

 func parentalGate() {

        let appearance = SCLAlertView.SCLAppearance(
            kTitleFont: UIFont(name: "Futura", size: 20)!,
            kTextFont: UIFont(name: "Futura", size: 14)!,
            kButtonFont: UIFont(name: "Futura", size: 14)!,
            showCloseButton: false
        )
        let alert = SCLAlertView(appearance: appearance)
        let alert2 = SCLAlertView(appearance: appearance)

        if (UserDefaults.standard.object(forKey: "language") as? String == "english") {

            let txt = alert.addTextField("Enter third letter")

            alert.addButton("Done") {

                if ((txt.text == "P") || (txt.text == "p")) {

                    self.parentalGatefunctions()
                } else {
                    alert2.addButton("Close", target: SCLAlertView(), selector: #selector(SCLAlertView.hideView))
                    alert2.showError("Incorrect letter entered", subTitle: "Try again")
                }
            }

            alert.addButton("Close", target: SCLAlertView(), selector: #selector(SCLAlertView.hideView))

            alert.showWarning("We need to be sure that You are an adult", subTitle: "Enter the third letter of word: HAPPY")

        }
}

func parentalGatefunctions(){

        // Parental gate functions are overriten in classes where they are used for
    }

}

Дочерний класс ниже:

class B: A {


    @IBAction func unlockAllCategoriesBtnPressed(_ sender: Any) {

        A().parentalGate()
    }

    override func parentalGatefunctions() {

        print ("Do something in class B")
    }
}

Другой класс:

class C: A {


    @IBAction func unlockAllCategoriesBtnPressed(_ sender: Any) {

        A().parentalGate()
    }

    override func parentalGatefunctions() {

        print ("Do something in class C")
    }

}

Все время, когда метод parentalGate () вызывается в классах B и C, вызывается только пустой parentalGateFunctions () без переопределенных методов, в классах не вызывается.

Я что-то не так делаю?Я просто хочу избежать повторяющегося кода в моих классах.

Спасибо!

1 Ответ

0 голосов
/ 17 декабря 2018

Ваша ошибка здесь.

@IBAction func unlockAllCategoriesBtnPressed(_ sender: Any) {
    A().parentalGate()
}

Поскольку у вас уже есть подкласс A, этот метод доступен для вас.Итак, просто вызовите метод в вашем подклассе, а не в новом экземпляре суперкласса!(что, очевидно, вызовет пустой метод)

@IBAction func unlockAllCategoriesBtnPressed(_ sender: Any) {
    parentalGate()
}
...