Szukam, aby móc wyciągnąć wystąpienie podklasy UIView z końcówki.Używanie 'self' w funkcjach rozszerzających klasy w Swift
Chciałbym móc wywoływać MyCustomView.instantiateFromNib() i mieć instancję MyCustomView. Jestem prawie gotowy, aby po prostu przesłać działający kod Objective-C jaki posiadam przez nagłówek pomostowy, ale pomyślałem, że najpierw spróbuję podejścia idiomatycznego. To było dwie godziny temu.
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
}
}
Teraz if (topLevelObject is self) {
jest błędne, ponieważ "Oczekiwany typ po 'jest'". To, co próbowałem później, pokazuje wiele rzeczy, których nie rozumiem w systemie typu Swift.
if (topLevelObject is Self) {
if (topLevelObject is self.dynamicType) {
if (topLevelObject is self.self) {
- milion innych zmian, które są not even wrong.
Dowolny wgląd jest mile widziany.
Fantastyczne!Zanurzyłem swój palec w ogólnych metodach, aby spróbować rozwiązać ten problem i nie zdałem sobie z tego sprawy. Dzięki! – rob5408
Znalazłem dziwny błąd w tym miejscu, w którym działa on na symulatorze i na urządzeniu, jeśli jest to wykonywane przez programistę, ale w powietrzu nie używa klasy widoku określonej w stalówce. Występują awarie zgłaszające, że inny widok z innym typem jest zwracany i traktuję go jako oczekiwany typ. Dziwne. – rob5408
Przełączanie flagi poziomu optymalizacji dla wersji wydań na Brak działało. Teraz muszę wymyślić, jak to naprawić. – rob5408