Swift equivalente di [NSBundle bundleForClass: [self class]]


131

Qual è l'equivalente rapido del prossimo codice:

[NSBundle bundleForClass:[self class]]

Ho bisogno di caricare risorse dal bundle di test (dati JSON)

Risposte:


222

Mai usato, ma penso che dovrebbe essere questo:

Swift <= 2.x

NSBundle(forClass: self.dynamicType)

Swift 3.x

Bundle(for: type(of: self))

39
Il completamento automatico nella versione corrente di Xcode si comporta come se non avesse idea di cosa tu stia parlando, ma in effetti funziona.
David Beck,

4
nella versione 2.1: NSBundle (forClass: self)
zwebie,

Il thread di evoluzione da considerare per cambiare questo è su github.com/apple/swift-evolution/blob/master/proposals/…
William Entriken

1
La soluzione non funziona per i tipi di valore. Prendi in considerazione l'utilizzo di init?(identifier: String)dove identificatore è l'ID bundle del tuo target. Un'altra soluzione per i tipi di valore è dichiarare una classe vuota all'interno del tipo di valore. Esempio di quest'ultima soluzione: Bundle(for: Foo.Bar.self)dove Foo- la tua struttura, Bar- una classe interna.
Vadim Bulavin,

1
Questo non funziona in Swift 3.1. type(of: self)tornerà ClassName.Typee chiamando Bundle(for:)a quello restituirà il pacchetto principale
adib

38

Swift 3:

Bundle(for: type(of: self))

3
La soluzione non funziona per i tipi di valore. Prendi in considerazione l'utilizzo di init?(identifier: String)dove identificatore è l'ID bundle del tuo target. Se non vuoi codificare l'ID del bundle, usa Bundle(for: Foo.Bar.self)dove Foo- la tua struttura Bar- una classe interna.
Vadim Bulavin,

12

Personalmente mi piace:

let bun = NSBundle(forClass: self.classForCoder)



7

La risposta selezionata non ha funzionato per me in un metodo statico di una sottoclasse UIView, ma ho trovato questo:

Bundle(for: self.classForCoder)

Questo funziona anche quando si desidera ottenere l' Bundleobiettivo all'interno di un test.


6

Se stai lavorando a una lezione allora

Bundle(for: type(of: self))

A volte potresti lavorare in una struttura, quindi devi usare qualsiasi classe nel bundle

Bundle(for: AnyClassInTheBundle.self)

4

Caricamento di xib per dynamicType della classe

    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);

-1

In Swift 3.0, puoi utilizzare:

func kZWGetBundle() -> Bundle{
    return Bundle(for: AnyClass.self as! AnyClass)
}

1
Si blocca e basta
Alexander Belyavskiy il

Si arresta in modo anomalo anche per me, votato in negativo per l'utilizzo della funzione Unrap Unrap nel codice di esempio.
SafeFastExpressive
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.