Ответы:
Никогда не использовал, но думаю, должно быть так:
Swift <= 2.x
NSBundle(forClass: self.dynamicType)
Swift 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)где идентификатор - это идентификатор пакета вашей цели. Если вы не хотите жестко кодировать идентификатор пакета, используйте Bundle(for: Foo.Bar.self)where Foo- ваша структура Bar- некоторый внутренний класс.
let bundle = NSBundle(forClass:object_getClass(self))
Swift 5
Bundle(for: Self.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)
}