ich folgenden Grund Enum habe:Kann nicht Swift Enum Extend
enum Voicity {}
Auf verschiedene Dateien, ich habe die oben Enum erweitere verschiedene Funktionen und Informationen zu speichern, die durch meine Anwendung als eine Zentralstation verwendet wird, .
Zum Beispiel verwende ich diese Enumeration, um meine UI-Elemente programmgesteuert zu erstellen.
extension Voicity {
enum sectionObject {
case textField(ofType: Voicity.UIElement.textField)
case button(ofType: Voicity.UIElement.button)
case label(ofType: Voicity.UIElement.label)
case line()
case photoCircle
case stackView(_: UIStackView)
case view(_: UIView)
var item: UIView {
switch self {
case .textField(let type):
return createTextField(ofType: type)
case .label(let type):
return createLabel(ofType: type)
case .line():
return createLine()
case .photoCircle:
return createPhotoCircle()
case .stackView(let view):
return view
case .view(let view):
return view
case .button(let type):
return createButton(ofType: type)
}
}
}
}
Zur besseren Lesbarkeit/Wartbarkeit, trennte ich die zurückgegebenen Funktionen, die oben in einzelne Dateien als auch durch wieder zur Verlängerung des sectionObject
Enum.
extension Voicity.sectionObject {
func createLabel(ofType type: Voicity.UIElement.label) -> UILabel {
// implementation here
}
}
Die oben genannten Arbeiten gut, aber wenn ich versuche, die createButton()
zu erklären:
extension Voicity.sectionObject {
func createButton(ofType type: Voicity.UIElement.button) -> UIButton {
// implementation here
}
}
ich die folgende Fehlermeldung erhalten:
sectionObject is not a member of Voicity
.
Warum kann ich nicht meine Enum auf eine Datei erweitern, wenn ich dies in einer anderen Datei tun kann?
aktualisieren
createButton()
und createLabel()
Methoden sind sowohl innerhalb als Gruppe/Ordner Model
.
Die enum-Deklarationen sind in Gruppe/Ordner Store
.
Also sind sie getrennt. Aber es erstaunt mich, dass createLabel()
funktioniert, wenn createButton()
nicht kann.
Es hat alles funktioniert (Methoden in verschiedenen Dateien), wenn meine Enum Fälle alle in einer einzigen Datei wieder unter Gruppe/Ordner Store
und Methoden unter Gruppe/Ordner Model
waren. Ich musste meine Enum-Fälle umgestalten, wenn sie vergrößert wurden.
Außerdem habe ich gerade jetzt versucht, createButton()
innerhalb der Erweiterung zu deklarieren createLabel()
. Und alles funktioniert aus irgendeinem Grund.
Zuvor löschte ich die Datei, die die createButton()
Methode deklariert und neu erstellt und alles ist das gleiche. Daher ist es kein seltsames Xcode-Problem.
Vielleicht ist es eine Frage des Zugriffsmodifikators. Es sollte standardmäßig auf interne Standard, so sollte es zugänglich sein Paket weit o.0 – Alexander
Mit Alexander Idee: Sind diese beiden Erweiterungen in der gleichen Datei? Wenn nicht, sind sie sicher im selben Modul? – HAS
@Alexander Bitte beachten Sie die Update ... –