2014-12-07 90 views
1

在Objective-C我有the following protocol符合目的-C协议夫特类

@protocol GCKDeviceScannerListener <NSObject>  
@optional 

- (void)deviceDidComeOnline:(GCKDevice *)device; 
- (void)deviceDidGoOffline:(GCKDevice *)device; 
- (void)deviceDidChange:(GCKDevice *)device; 

@end 

当试图以符合该协议在夫特的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时,所有工作都可以正常工作。由于最后一部分,我假设网络或硬件或类似的东西没有任何问题。

这可能是我错过了一些重要的东西,从https://developers.google.com/cast/docs/ios_sender,但我想知道如果斯威夫特代码本身是正确的,根据协议。由于该协议只有可选功能,因此很难确定它是否正确。

+0

您可以通过使用'self.respondsToSelector测试你的ViewController的协议一致性(“deviceDidComeOnline:”)' – Darren 2014-12-07 19:30:36

回答

2

我有这个库中没有经验,但我认为你应该保持参照GCKDeviceScanner

尝试:

class ViewController: UIViewController, GCKDeviceScannerListener { 

    var deviceScanner = GCKDeviceScanner() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     deviceScanner.addListener(self) 
     deviceScanner.startScan() 
     println("scanning") 
    } 
+0

因为我认为这与我的问题没有任何关系,但是之后我查看了你的SO分数,然后试用了它,结果很奏效。 :)你知道还是关心评论它为什么像这样工作? – 2014-12-08 18:31:02

+2

在您的原始代码中,当'viewDidLoad'返回时'deviceScanner'被释放。我认为,这会默默取消扫描,并删除其听众。 – rintaro 2014-12-09 04:53:21

0

Apple's documentation on Protocols是漫长而复杂的。

最简单的想法是optional协议方法(如可选闭包),您可以将其与可选链接一起使用。

@objc class Something { 
    var delegate: GCKDeviceScannerListener? 

    func someCallback() { 
     delegate?.deviceDidComeOnline?(device) 
    } 
} 
+3

我不认为这是我正想什么OP要求 – 2014-12-07 19:50:53