【发布时间】:2015-02-05 10:36:59
【问题描述】:
在 Objective-C 中我有 the following protocol:
@protocol GCKDeviceScannerListener <NSObject>
@optional
- (void)deviceDidComeOnline:(GCKDevice *)device;
- (void)deviceDidGoOffline:(GCKDevice *)device;
- (void)deviceDidChange:(GCKDevice *)device;
@end
当试图在 Swift Xcode 6.1 中遵循这个协议时,它会像这样自动完成:
class ViewController: UIViewController, GCKDeviceScannerListener {
override func viewDidLoad() {
super.viewDidLoad()
var deviceScanner = GCKDeviceScanner();
deviceScanner.addListener(self);
deviceScanner.startScan();
println("scanning");
}
func deviceDidComeOnline(device: GCKDevice!) {
println("deviceDidComeOnline()");
}
func deviceDidGoOffline(device: GCKDevice!) {
println("deviceDidGoOffline()");
}
func deviceDidChange(device: GCKDevice!) {
println("deviceDidChange()");
}
}
代码在模拟器上编译并且看起来运行正常。但是,从未触发任何侦听器函数。运行仅用 Objective-C 编写的the demo project from Google 时,一切都 100% 有效。由于最后一部分,我假设网络或硬件或类似的东西没有任何问题。
可能是我错过了https://developers.google.com/cast/docs/ios_sender 的重要内容,但我想知道根据协议,Swift 代码本身是否正确。由于该协议只有可选功能,因此很难知道它是否正确。
【问题讨论】:
-
你可以使用
self.respondsToSelector("deviceDidComeOnline:")来测试你的ViewController的协议一致性
标签: ios objective-c swift chromecast