[এনএসবান্ডেল বান্ডেলফোর্ডক্লাস: [স্ব শ্রেণি]] এর সমতুল্য


131

পরবর্তী কোডের তাত্ক্ষণিক সমতুল্য কী:

[NSBundle bundleForClass:[self class]]

আমার পরীক্ষার বান্ডিল (JSON ডেটা) থেকে লোড সংস্থানগুলি দরকার

উত্তর:


222

কখনও ব্যবহার করা হয়নি, তবে আমি মনে করি এটি হওয়া উচিত:

সুইফট <= 2.x

NSBundle(forClass: self.dynamicType)

সুইফট 3.x

Bundle(for: type(of: self))

39
এক্সকোডের বর্তমান সংস্করণে স্বতঃপূরণ যেমন আপনি কী বলছেন তার কোনও ধারণা নেই তবে এটি কার্যকরভাবে কাজ করে।
ডেভিড বেক

4
সংস্করণ ২.১ এ: এনএসবান্ডেল (forClass: স্ব)
zwebie

এটি পরিবর্তনের জন্য বিবেচনা করা বিবর্তনের থ্রেডটি github.com/apple/swift-evolution/blob/master/proposals/…
উইলিয়াম এন্টারিকেন

1
সমাধান মান ধরণের জন্য কাজ করে না। init?(identifier: String)সনাক্তকারী আপনার টার্গেটের বান্ডিল আইডি কোথায় তা ব্যবহার করার বিষয়টি বিবেচনা করুন । মান ধরণের জন্য আরেকটি সমাধান হ'ল আপনার মান ধরণের ভিতরে খালি শ্রেণি ঘোষণা করা। পরবর্তী সমাধানের উদাহরণ: Bundle(for: Foo.Bar.self)যেখানে Foo- আপনার কাঠামো Bar- কিছু অভ্যন্তর শ্রেণি।
ভাদিম বুলাভিন

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

নির্বাচিত উত্তরটি আমার জন্য কোনও ইউআইভিউ সাবক্লাসের স্থির পদ্ধতিতে কাজ করে না, তবে আমি এটি পেয়েছি:

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
এটি কেবল ক্র্যাশ করেছে
আলেকজান্ডার বেলিয়াভস্কি

আমার পক্ষে ক্র্যাশগুলিও নীচে নমুনা কোডটিতে জোর করে আন-র্যাপ ব্যবহারের পক্ষে ভোট দিয়েছে।
SafeFastExpressive
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.