有3种方法可以保证协议只能被类遵守 1.协议遵守NSObject

protocol Runable: NSObject {
    
}

2.协议遵守class

protocol Runable: class {
    
}

3.使用@objc修饰协议

// 被@objc修饰的协议,还可以暴露给Objective-C去遵守实现
@objc protocol Runable {
    
}

总结: 如果考虑到SwiftObjective-C混编,所写的协议要支持Objective-C,那么使用@objc关键字实现协议的可选方法是更好的选择