2015-11-06 2 views
4

Я хочу, чтобы проверить, что UIViewController соответствует протоколу моего собственного творчества:conformsToProtocol не будет компилировать с пользовательским протоколом

import UIKit 

protocol myProtocol { 
    func myfunc() 
} 

class vc : UIViewController { 

} 

extension vc : myProtocol { 
    func myfunc() { 
     //My implementation for this class 
    } 
} 

//Not allowed 
let result = vc.conformsToProtocol(myProtocol) 

//Allowed 
let appleResult = vc.conformsToProtocol(UITableViewDelegate) 

Однако я получаю следующее сообщение об ошибке:

Cannot convert value of type '(myprotocol).Protocol' (aka 'myprotocol.Protocol') to expected argument type 'Protocol'

Playground

Что я делаю неправильно?

+1

'@objc protocol myProtocol { func myfunc() }' –

ответ

7

В Swift, лучшим решением является is:

let result = vc is MyProtocol 

или as?:

if let myVC = vc as? MyProtocol { ... then use myVC that way ... } 

Но использовать conformsToProtocol, необходимо отметить протокол @objc:

@objc protocol MyProtocol { 
    func myfunc() 
} 

(Обратите внимание, что классы и протоколы всегда должны начинаться с ac apital.)

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