2015-06-24 2 views
4

У меня есть функция в Objective-C в следующемПередайте быстрое закрытие к функции Objective-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

Я думаю, что это может быть shortcut к вашей проблеме:

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

Эй, @Ben, спасибо за информацию. Но в моем случае ответHandler является частью обратного вызова делегата. в частности функцию didReceiveMessage от WatchConnectivity. Поэтому я не могу изменить тип моего ответаHandler, отбрасывая его ([NSObject: AnyObject]) -> Void) тоже не работает. Знаете ли вы, как обойти это? Благодаря! –

Смежные вопросы