2017-01-16 3 views
0
extension UIViewController { 
    func getChildViewController<T>(OfType: T) { 
     let classType = Mirror(reflecting: self.childViewControllers.first).subjectType 

     if classType == T.self { 
      print("there is a match") 
     } 
    } 
} 

Это расширение UIViewController, а при вызове этой функции, вы передаете его тип, например:Сравнение ViewController к типу в быстрой

ViewController.getChildViewController(OfType: SecondViewController.self) 

Это будет проверять, если первый ребенок вид контроллера, если тип SecondViewController

Но если заявление я получаю сообщение об ошибке:

Binary operator '==' cannot be applied to operands of type 'Any.Type' and 'T' 
+0

Я как-то удачно скомпилировал это в Swift 3. – Sweeper

ответ

0

Просто пришлось бросить его, как: any.Type

let passedType = ofType as? Any.Type 
if classType == passedType { 
    print("there is a match") 
} 
1

Вы просто вызываете общий код, когда вам нужно вызвать имя параметра для общего.

Вы пробовали:

if classType == ofType.self { ... 
+0

ах, да только что попробовал, что все еще получаю ошибку: двоичный оператор '==' не может применяться к операндам типа «Any.Type» и «T», –

0

isKindOf в Swift 3 просто is, так что вы должны использовать что-то вроде:

if classType is SecondViewController { 
    print("there is a match") 
} 
0

Я думаю, что следует использовать === Apple swift язык программирования p.768

Смежные вопросы