Câu trả lời:
Không bao giờ được sử dụng, nhưng tôi nghĩ nó nên như thế này:
Swift <= 2.x
NSBundle(forClass: self.dynamicType)
Swift 3.x
Bundle(for: type(of: self))
init?(identifier: String)
nơi định danh là ID gói mục tiêu của bạn. Một giải pháp khác cho các loại giá trị là khai báo một lớp trống bên trong loại giá trị của bạn. Ví dụ về giải pháp sau: Bundle(for: Foo.Bar.self)
where Foo
- struct của bạn, Bar
- một số lớp bên trong.
type(of: self)
sẽ quay lại ClassName.Type
và gọi Bundle(for:)
tới đó trả về gói chính
Swift 3:
Bundle(for: type(of: self))
init?(identifier: String)
nơi định danh là ID gói mục tiêu của bạn. Nếu bạn không muốn mã hóa ID gói, hãy sử dụng Bundle(for: Foo.Bar.self)
vị trí Foo
- cấu trúc của bạn Bar
- một số lớp bên trong.
let bundle = NSBundle(forClass:object_getClass(self))
Swift 5
Bundle(for: Self.self)
Nếu bạn đang làm việc trên một lớp thì
Bundle(for: type(of: self))
Đôi khi bạn có thể làm việc trong một cấu trúc, sau đó bạn cần sử dụng bất kỳ lớp nào trong gói
Bundle(for: AnyClassInTheBundle.self)
Đang tải 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);
Trong Swift 3.0, bạn có thể sử dụng:
func kZWGetBundle() -> Bundle{
return Bundle(for: AnyClass.self as! AnyClass)
}