Swift เทียบเท่ากับรหัสถัดไปคืออะไร:
[NSBundle bundleForClass:[self class]]
ฉันต้องการโหลดทรัพยากรจากชุดทดสอบ (ข้อมูล JSON)
Swift เทียบเท่ากับรหัสถัดไปคืออะไร:
[NSBundle bundleForClass:[self class]]
ฉันต้องการโหลดทรัพยากรจากชุดทดสอบ (ข้อมูล JSON)
คำตอบ:
ไม่เคยใช้ แต่ฉันคิดว่ามันควรจะเป็น:
รวดเร็ว <= 2.x
NSBundle(forClass: self.dynamicType)
สวิฟต์ 3.x
Bundle(for: type(of: self))
init?(identifier: String)
ที่ตัวระบุคือรหัสกลุ่มเป้าหมายของคุณ อีกวิธีหนึ่งสำหรับชนิดค่าคือการประกาศคลาสว่างภายในประเภทค่าของคุณ ตัวอย่างของวิธีแก้ปัญหาหลัง: Bundle(for: Foo.Bar.self)
โดยที่Foo
- โครงสร้างของคุณBar
- คลาสภายในบางส่วน
type(of: self)
จะกลับมาClassName.Type
และเรียกBundle(for:)
ไปที่ส่งคืนชุดหลัก
Swift 3:
Bundle(for: type(of: self))
init?(identifier: String)
ที่ตัวระบุคือรหัสกลุ่มเป้าหมายของคุณ หากคุณไม่ต้องการฮาร์ดโค้ดบันเดิล ID ให้ใช้Bundle(for: Foo.Bar.self)
where Foo
- โครงสร้างของคุณBar
- คลาสภายใน
ฉันชอบ:
let bun = NSBundle(forClass: self.classForCoder)
let bundle = NSBundle(forClass:object_getClass(self))
สวิฟต์ 5
Bundle(for: Self.self)
คำตอบที่เลือกไม่ได้ผลสำหรับฉันในวิธีการคงที่ของคลาสย่อย UIView แต่ฉันพบสิ่งนี้:
Bundle(for: self.classForCoder)
นอกจากนี้ยังใช้ได้ผลเมื่อคุณต้องการได้รับBundle
ภายในเป้าหมายการทดสอบ
หากคุณกำลังทำงานในชั้นเรียนแล้ว
Bundle(for: type(of: self))
บางครั้งคุณอาจทำงานในโครงสร้างจากนั้นคุณต้องใช้คลาสใดก็ได้ในบันเดิล
Bundle(for: AnyClassInTheBundle.self)
กำลังโหลด xib สำหรับ dynamicType ของคลาส
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);
ใน Swift 3.0 คุณสามารถใช้:
func kZWGetBundle() -> Bundle{
return Bundle(for: AnyClass.self as! AnyClass)
}