Ich habe eine Klasse, in der der Benutzer eine benutzerdefinierte Ansicht initialisieren soll, indem er Eigenschaften wie folgt angibt:
%Vor% Wenn der Benutzer seine eigenen Eigenschaften nicht initialisieren möchte, möchte ich CustomLoadingView
mit den Standardeigenschaften initialisieren ...
Damit bekomme ich jedoch diesen Fehler:
Muss einen designierten Initializer der Superklasse UIView
aufrufen
In init(subviewColor: UIColor, subViewMessage: String)
rufen Sie nicht den designierten Initialisierer auf (wie der Compiler schön hervorhebt).
Wenn Sie nicht wissen, welche designierten Initialisierer sind, sind sie Initialisierer, die irgendwann von der Unterklasse aufgerufen werden müssen. Aus der Dokumentation:
Gekennzeichnete Initialisierer sind die primären Initialisierer für eine Klasse. Ein designierter Initialisierer initialisiert alle von dieser Klasse eingeführten Eigenschaften vollständig und ruft einen geeigneten Superklasseninitialisierer auf, um den Initialisierungsprozess bis zur Superklassenkette fortzusetzen.
In diesem Fall ist der angegebene Initialisierer für UIView
init(frame: CGRect)
, was bedeutet, dass Ihr neuer Initialisierer init(subviewColor: UIColor, subViewMessage: String
zu einem bestimmten Zeitpunkt super.init(frame:)
aufrufen muss.
Um das zu beheben, nehmen Sie folgende Änderungen vor:
%Vor%ODER Sie können Ihren anderen Initialisierer in Ihrer Klasse aufrufen, der schließlich den designierten Initialisierer aufruft.
%Vor% Wie für die Bequemlichkeitsmethode mit einfach CustomLoadingView()
, müssen Sie einen anderen Initialisierer dafür hinzufügen. Fügen Sie diesen Code Ihrer benutzerdefinierten Ansicht hinzu:
Wenn Sie mehr über designed und convenience-Initialisierer erfahren möchten, lesen Sie hier und hier .
Sie müssen zu einem bestimmten Zeitpunkt in Ihrem benutzerdefinierten Initialisierer einen der UIView-Initialisierer aufrufen, zum Beispiel: super.init(frame: frameX)
. Ihr Aufruf von super.init()
erfüllt diese Anforderung nicht.