[NSBundle bundleForClass: [स्वयं वर्ग]] के बराबर स्विफ्ट


131

अगले कोड के बराबर क्या है स्विफ्ट:

[NSBundle bundleForClass:[self class]]

मुझे परीक्षण बंडल (JSON डेटा) से लोड संसाधनों की आवश्यकता है

जवाबों:


222

कभी इस्तेमाल नहीं किया, लेकिन मुझे लगता है कि यह होना चाहिए:

स्विफ्ट <= 2.x

NSBundle(forClass: self.dynamicType)

स्विफ्ट 3.x

Bundle(for: type(of: self))

39
Xcode के वर्तमान संस्करण में स्वतः पूर्ण जैसा कि यह पता नहीं है कि आप किस बारे में बात कर रहे हैं, लेकिन यह वास्तव में काम करता है।
डेविड बेक

4
संस्करण 2.1 में: NSBundle (forClass: self)
zwebie

इसे बदलने पर विचार करने वाला विकास सूत्र github.com/apple/swift-evolution/blob/master/proposals/… पर है
विलियम एंट्रीकेन

1
समाधान मान प्रकारों के लिए काम नहीं करता है। init?(identifier: String)यह पहचानने पर विचार करें कि पहचानकर्ता आपके लक्ष्य का बंडल आईडी कहां है। मूल्य प्रकारों के लिए एक और समाधान आपके मूल्य प्रकार के अंदर एक खाली वर्ग घोषित करना है। बाद के समाधान का उदाहरण: Bundle(for: Foo.Bar.self)जहां Foo- आपकी संरचना, Bar- कुछ आंतरिक वर्ग।
वादिम बुलाविन

1
यह स्विफ्ट 3.1 में काम नहीं करता है। type(of: self)लौटेगा ClassName.Typeऔर Bundle(for:)उस कॉल को मुख्य बंडल
लौटाएगा

38

स्विफ्ट 3:

Bundle(for: type(of: self))

3
समाधान मान प्रकारों के लिए काम नहीं करता है। init?(identifier: String)यह पहचानने पर विचार करें कि पहचानकर्ता आपके लक्ष्य का बंडल आईडी कहां है। यदि आप बंडल आईडी को हार्डकोड नहीं करना चाहते हैं, तो उपयोग करें Bundle(for: Foo.Bar.self)जहां Foo- आपकी संरचना, Bar- कुछ आंतरिक वर्ग।
वादिम बुलाविन

12

मुझे व्यक्तिगत रूप से पसंद है:

let bun = NSBundle(forClass: self.classForCoder)



7

चयनित उत्तर मेरे लिए एक UIView उपवर्ग की स्थिर विधि में काम नहीं किया, लेकिन मुझे यह मिला:

Bundle(for: self.classForCoder)

यह भी काम करता है जब आप Bundleएक परीक्षण लक्ष्य के भीतर प्राप्त करना चाहते हैं ।


6

अगर आप क्लास में काम कर रहे हैं तो

Bundle(for: type(of: self))

कभी-कभी आप एक संरचना में काम कर सकते हैं, तो आपको बंडल में किसी भी वर्ग का उपयोग करने की आवश्यकता होती है

Bundle(for: AnyClassInTheBundle.self)

4

कक्षा के डायनेमिक टाइप के लिए xib लोड हो रहा है

    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

स्विफ्ट 3.0 में, आप उपयोग कर सकते हैं:

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

1
यह बस दुर्घटनाग्रस्त हो जाता है
अलेक्जेंडर Belyavskiy

मेरे लिए भी क्रैश, नीचे नमूना कोड में बल का उपयोग नहीं करने के लिए मतदान किया।
SafeFastExpressive
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.