Co to jest szybki odpowiednik następnego kodu:
[NSBundle bundleForClass:[self class]]
Potrzebuję zasobów ładowania z pakietu testowego (dane JSON)
Odpowiedzi:
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)gdzie Foo- twoja struktura, Bar- jakaś klasa wewnętrzna.
type(of: self)powróci, ClassName.Typea wywołanie Bundle(for:)tego spowoduje zwrócenie głównego pakietu
Swift 3:
Bundle(for: type(of: self))
init?(identifier: String)gdzie identyfikator jest identyfikatorem pakietu celu. Jeśli nie chcesz zakodować na stałe identyfikatora pakietu, użyj Bundle(for: Foo.Bar.self)where Foo- your struct, Bar- some inside class.
Szybki 5
Bundle(for: Self.self)
let bundle = NSBundle(forClass:object_getClass(self))
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)
Ł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);
W Swift 3.0 możesz użyć:
func kZWGetBundle() -> Bundle{
return Bundle(for: AnyClass.self as! AnyClass)
}