2014-12-07 69 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

相關問題