Giải pháp tốt nhất ở đây phụ thuộc vào những gì bạn cần một gói.
Tài khoản có tìm kiếm tài nguyên chỉ tồn tại trong một gói ứng dụng, khung công cụ hoặc tiện ích mở rộng cụ thể được biết là được tải khi mã bạn đang viết chạy không? Trong trường hợp đó, bạn có thể muốn sử dụng init(identifier:)
thay vì tự động tìm kiếm gói xác định một loại nhất định.
Hãy coi chừng "theo dõi loại" gói tra cứu. Ví dụ: nếu một lớp khung Foo
sử dụng NSBundle(forClass: self.dynamicType)
để tải tài nguyên, một lớp con của Foo
được xác định bởi ứng dụng tải khung đó sẽ kết thúc tìm trong gói ứng dụng thay vì gói khung.
Nếu bạn cần một "theo kiểu" bó tra cứu cho một cấu trúc (hoặc enum), một trong những cách giải quyết mà có thể chứng minh hữu ích được định nghĩa một lớp như một subtype:
struct Foo {
class Bar {}
static var fooBundle: NSBundle { return NSBundle(forClass: Foo.Bar.self) }
}
Lưu ý không có gì động ở đây, bởi vì không có gì cần phải có - mỗi Foo
xuất phát từ cùng một định nghĩa kiểu (vì cấu trúc không thể kế thừa), vì vậy kiểu tĩnh của nó khớp với kiểu động của nó.
(Phải thừa nhận rằng, một NSBundle(forType:)
mà có thể xử lý cấu trúc, sự đếm, và các giao thức có thể làm cho một nice feature request. Mặc dù tôi tưởng tượng nó có thể là khó khăn để làm cho nó xử lý phần mở rộng và tất cả mọi thứ ...)
Cũng tìm kiếm một câu trả lời cho điều này .. Tôi hiện đang có một định nghĩa lớp giữ chỗ và một phần mở rộng 'NSBundle' giúp đỡ để tôi có thể tiếp tục làm việc cho đến khi một giải pháp thích hợp được tìm thấy –