Co to jest szybki odpowiednik następnego kodu:
[NSBundle bundleForClass:[self class]]
Potrzebuję zasobów ładowania z pakietu testowego (dane JSON)
Nigdy nie używane, ale myślę, że powinno być tak:
Swift <= 2.x
NSBundle(forClass: self.dynamicType)
Swift 3.x
Bundle(for: type(of: self))
init?(identifier: String)
gdzie identyfikator jest identyfikatorem pakietu celu. Innym rozwiązaniem dla typów wartości jest zadeklarowanie pustej klasy wewnątrz typu wartości. Przykład drugiego rozwiązania:Bundle(for: Foo.Bar.self)
gdzieFoo
- twoja struktura,Bar
- jakaś klasa wewnętrzna.type(of: self)
powróci,ClassName.Type
a wywołanieBundle(for:)
tego spowoduje zwrócenie głównego pakietuSwift 3:
Bundle(for: type(of: self))
źródło
init?(identifier: String)
gdzie identyfikator jest identyfikatorem pakietu celu. Jeśli nie chcesz zakodować na stałe identyfikatora pakietu, użyjBundle(for: Foo.Bar.self)
whereFoo
- your struct,Bar
- some inside class.Osobiście lubię:
let bun = NSBundle(forClass: self.classForCoder)
źródło
Szybki 5
Bundle(for: Self.self)
źródło
let bundle = NSBundle(forClass:object_getClass(self))
źródło
Wybrana odpowiedź nie zadziałała dla mnie w metodzie statycznej podklasy UIView, ale znalazłem to:
Bundle(for: self.classForCoder)
Działa to również, gdy chcesz uzyskać
Bundle
cel testowy.źródło
Jeśli pracujesz na zajęciach, to
Bundle(for: type(of: self))
Czasami możesz pracować w strukturze, wtedy musisz użyć dowolnej klasy w pakiecie
Bundle(for: AnyClassInTheBundle.self)
źródło
Ładowanie xib dla dynamicType klasy
let bundle = NSBundle(forClass: self.dynamicType) let nib = UINib(nibName: "CellForAlert", bundle: bundle) let view = nib.instantiateWithOwner(self, options: nil).first as! UIView view.frame = bounds view.autoresizingMask = [.FlexibleWidth, .FlexibleHeight] self.addSubview(view);
źródło
Myślę, że szukasz
Bundle.main
Dokumenty
źródło
W Swift 3.0 możesz użyć:
func kZWGetBundle() -> Bundle{ return Bundle(for: AnyClass.self as! AnyClass) }
źródło