2015-06-24 59 views
4

我在目標C的函數,如以下傳遞迅速閉合到目標-C函數,它接受一個塊作爲參數

- (void) fetchChannelListForWatch:(void (^)(NSDictionary *))callback 

我想迅速回調閉合通入此像這樣:

fetchChannelListForWatch(replyHandler) 

其中replyHandler的類型是

replyHandler: ([String : AnyObject]) -> Void) 

的關閉和我得到的錯誤:

Cannot invoke 'fetchChannelListForWatch' with an argument list of type '(([String : AnyObject]) -> Void)' 

的replyHandler從WatchConnectivity委託

func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) 

來,所以我不能改變replyHandler的類型。

我如何通過我迅速的關閉與參數

replyHandler: [String: AnyObject] ->() 

成一個Objective-C函數,接受塊與參數

- (void) fetchChannelListForWatch:(void (^)(NSDictionary *))callback 

你的幫助深表感謝!

+0

如果你只是在這裏粘貼代碼(而不是使用圖片),那麼讀起來會更容易。 – Eiko

+0

@Eiko,感謝您的編輯! –

回答

2

我覺得這可能是一個您問題的快捷方式:

func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void){ 
     let objCObject = ObjectiveCClass() 

     objCObject.fetchChannelListForWatch { (dict) -> Void in 
      replyHandler(dict as! [String : AnyObject]?) 
     } 
} 
2

爲NSDictionary中的橋型爲

[NSObject: AnyObject] 

在你的情況,你需要更新你的replyHandler

replyHandler: ([NSObject : AnyObject]) -> Void) 

下面是相關文檔https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/WorkingWithCocoaDataTypes.html

+0

嘿@本,謝謝你提供的信息。但就我而言,replyHandler是委託回調的一部分。特別是WatchConnectivity的didReceiveMessage函數。所以我不能改變我的replyHandler類型,將它轉換爲([NSObject:AnyObject]) - > Void)也不起作用。你會知道如何解決這個問題嗎?謝謝! –

相關問題