2014-09-03 15 views

Trả lời

165

Không bao giờ được sử dụng, nhưng tôi nghĩ rằng nó phải được điều này:

Swift < = 2.x

NSBundle(forClass: self.dynamicType) 

Swift 3.x

Bundle(for: type(of: self)) 
+34

Tự động hoàn tất trong phiên bản hiện tại của Xcode hoạt động như nó không biết bạn đang nói gì, nhưng nó thực sự hoạt động. –

+1

Yanno. Tôi chỉ yêu nơi này! Cảm ơn! –

+3

trong phiên bản 2.1: NSBundle (forClass: self) – zwebie

8
let bundle = NSBundle(forClass:object_getClass(self)) 
9

Cá nhân tôi thích:

let bun = NSBundle(forClass: self.classForCoder) 
+0

Điều này làm việc tốt nhất cho Swift 3.1 (Xcode 8.3) – adib

3

Loading the xib cho dynamicType của lớp

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

Swift 3:

Bundle(for: type(of: self)) 
+1

Giải pháp doesn ' t làm việc cho các loại giá trị. Xem xét sử dụng 'init? (Mã định danh: Chuỗi)' trong đó số nhận dạng là ID nhóm của mục tiêu của bạn. Nếu bạn không muốn hardcode bundle ID, sử dụng 'Bundle (for: Foo.Bar.self)' trong đó 'Foo' - struct của bạn,' Bar' - một số lớp bên trong. –

1

Trong Swift 3.0, bạn có thể sử dụng:

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

Nó chỉ bị treo –

0

Câu trả lời được lựa chọn không làm việc cho tôi trong một phương pháp tĩnh của một lớp con UIView, nhưng tôi thấy điều này:

Bundle(for: self.classForCoder) 

Điều này cũng hoạt động khi bạn muốn nhận được Bundle trong một mục tiêu thử nghiệm.

Các vấn đề liên quan