Использование 'self' в функциях расширения класса в Swift

Я ищу возможность извлечь экземпляр подкласса UIView из Nib.

Я хотел бы иметь возможность вызывать MyCustomView.instantiateFromNib () и иметь экземпляр MyCustomView. Я почти готов просто перенести рабочий код Objective-C, который у меня есть, через заголовок моста, но решил, что сначала попробую идиоматический подход. Это было два часа назад.

extension UIView {
    class func instantiateFromNib() -> Self? {

        let topLevelObjects = NSBundle.mainBundle().loadNibNamed("CustomViews", owner: nil, options: nil)

        for topLevelObject in topLevelObjects {
            if (topLevelObject is self) {
                return topLevelObject
            }
        }

        return nil
    }
}

Теперь if (topLevelObject is self) { неверно, потому что "Ожидаемый тип после 'is'". То, что я попробовал после этого, показывает многое из того, что я не понимаю в системе типов Swift.

  • if (topLevelObject is Self) {
  • if (topLevelObject is self.dynamicType) {
  • if (topLevelObject is self.self) {
  • Миллион других вариаций, которые даже не ошибаются .

Любое понимание приветствуется.

9
задан rob5408 1 July 2015 в 15:25
поделиться