Junior — Middle
Είναι δυνατόν να καλέσετε τη μέθοδο super στον κατασκευαστή convenience initializer στο Swift;
sobes.tech AI
Απάντηση από AI
Στη Swift, η κλήση super.init στον constructor convenience initializer δεν είναι δυνατή άμεσα. Σύμφωνα με τους κανόνες αρχικοποίησης στη Swift, οι convenience αρχικοποιητές πρέπει να καλούν έναν άλλο αρχικοποιητή της ίδιας κλάσης, όχι του υπερκλάσης.
Μόνο ο designated initializer (ο κύριος αρχικοποιητής) μπορεί να καλέσει super.init. Επομένως, ο convenience αρχικοποιητής πρέπει πρώτα να καλέσει τον designated initializer της δικής του κλάσης, ο οποίος με τη σειρά του θα καλέσει super.init.
Παράδειγμα:
class Parent {
init() {
print("Parent init")
}
}
class Child: Parent {
override init() {
super.init() // κλήση της υπερκλάσης στον designated initializer
print("Child designated init")
}
convenience init(param: Int) {
self.init() // κλήση του designated initializer της δικής του κλάσης
print("Child convenience init με παράμετρο \(param)")
}
}
let c = Child(param: 5)
Εδώ, ο convenience init καλεί self.init(), και self.init() καλεί super.init().