[NSBundle bundleForClass: [self class]] 'ın hızlı eşdeğeri


131

Sonraki kodun hızlı eşdeğeri nedir:

[NSBundle bundleForClass:[self class]]

Test paketinden yük kaynaklarına ihtiyacım var (JSON verileri)

Yanıtlar:


222

Hiç kullanılmadı, ama bence şu olmalı:

Swift <= 2.x

NSBundle(forClass: self.dynamicType)

Swift 3.x

Bundle(for: type(of: self))

39
Xcode'un mevcut sürümünde otomatik tamamlama, neden bahsettiğiniz hakkında hiçbir fikri yokmuş gibi davranır, ancak gerçekten işe yarar.
David Beck

4
sürüm 2.1: NSBundle (forClass: self)
zwebie


1
Çözüm, değer türleri için işe yaramıyor. init?(identifier: String)Tanımlayıcının hedefinizin paket kimliği olduğu yeri kullanmayı düşünün . Değer türleri için başka bir çözüm, değer türünüzün içinde boş bir sınıf bildirmektir. İkinci çözüme örnek: Bundle(for: Foo.Bar.self)nerede Foo- yapınız, Bar- bazı iç sınıflar.
Vadim Bulavin

1
Bu Swift 3.1'de çalışmaz. type(of: self)dönecek ClassName.Typeve arama Bundle(for:)buna getiri ana paket
adib

38

Swift 3:

Bundle(for: type(of: self))

3
Çözüm, değer türleri için işe yaramıyor. init?(identifier: String)Tanımlayıcının hedefinizin paket kimliği olduğu yeri kullanmayı düşünün . Paket kimliğini sabit kodlamak istemiyorsanız, Bundle(for: Foo.Bar.self)nerede Foo- yapınız, Bar- bir iç sınıf kullanın.
Vadim Bulavin

12

Şahsen beğeniyorum:

let bun = NSBundle(forClass: self.classForCoder)



7

Seçilen cevap, bir UIView alt sınıfının statik bir yönteminde benim için işe yaramadı, ancak şunu buldum:

Bundle(for: self.classForCoder)

Bu, Bundlebir test hedefinin içine girmek istediğinizde de işe yarar.


6

Bir sınıfta çalışıyorsanız o zaman

Bundle(for: type(of: self))

Bazen bir yapı içinde çalışabilirsiniz, sonra paketteki herhangi bir sınıfı kullanmanız gerekir

Bundle(for: AnyClassInTheBundle.self)

4

Sınıfın dynamicType'ı için xib'i yükleme

    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

Swift 3.0'da şunları kullanabilirsiniz:

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

1
Sadece çöküyor
Alexander Belyavskiy

Benim için de çökmeler, örnek kodda zorla açmanın kullanılması yönünde oylama yapıldı.
SafeFastExpressive
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.