Ich bin in der Lage, eine Instanz einer UIView-Unterklasse aus einem Nib herauszuziehen.Mit 'self' in Klassenerweiterungsfunktionen in Swift
Ich möchte MyCustomView.instantiateFromNib() aufrufen und eine Instanz von MyCustomView haben. Ich bin fast bereit, den funktionierenden Objective-C-Code, den ich über den Bridging-Header habe, einfach zu portieren, aber ich dachte, ich würde zuerst den idiomatischen Ansatz ausprobieren. Das war vor zwei Stunden.
extension UIView {
class func instantiateFromNib() -> Self? {
let topLevelObjects = NSBundle.mainBundle().loadNibNamed("CustomViews", owner: nil, options: nil)
for topLevelObject in topLevelObjects {
if (topLevelObject is self) {
return topLevelObject
}
}
return nil
}
}
Jetzt ist if (topLevelObject is self) {
falsch, weil "Expected Art nach 'ist'". Was ich danach versucht habe, zeigt viel über das, was ich über das Swift-System nicht verstehe.
if (topLevelObject is Self) {
if (topLevelObject is self.dynamicType) {
if (topLevelObject is self.self) {
- Eine Million andere Variationen, die not even wrong sind.
Jeder Einblick wird geschätzt.
Fantastisch!Ich hatte meinen Zeh in generische Methoden getaucht, um zu versuchen, dies zu lösen und scheiterte kläglich. Vielen Dank! – rob5408
Ich fand einen seltsamen Fehler mit diesem, wo es auf dem Simulator und auf dem Gerät funktioniert, wenn es über die Entwicklungsbereitstellung getan wird, aber es verwendet nicht die Klasse der Ansicht, die innerhalb der Nib angegeben ist. Ich bekomme Abstürze, die melden, dass eine andere Ansicht mit einem anderen Typ zurückgegeben wird, und ich behandle sie als den erwarteten Typ. Seltsam. – rob5408
Das Flag für die Optimierungsebene für Release-Builds wurde auf None gesetzt. Jetzt muss ich herausfinden, wie ich es richtig beheben kann. – rob5408