2016-08-17 5 views
2

Я пытаюсь вызвать быстрый метод, который реализуется так: -вызова обработчик Swift завершения в объективном с

@objc class DataAPI: NSObject { 
    func makeGet(place:NSString , completionHandler: (String! , Bool!) -> Void) 
    { 
     var str:String = "" 
     let manager = AFHTTPSessionManager() 

     manager.GET("https://api.com", parameters: nil, success: 
       { (operation, responseObject) -> Void in 
         str = "JSON: \(responseObject!.description)" 
         print(str) 

         completionHandler(str,false) //str as response json, false as error value 

      }, 
        failure: { (operation,error: NSError!) in 
         str = "Error: \(error.localizedDescription)" 
         completionHandler("Error",true) 
     }) 

    }} 

Теперь, когда я пытаюсь вызвать его в моем Objective класса C, он бросает ошибка "нет Видимый интерфейс для DataAPI заявляет селектор makeGet: completionHandler"

Это, как я называю метод в моем классе Objective C: -

[[DataAPI new] makeGet:@"" completionHandler:^{ 
}]; 

ответ

1

Вы не должны использовать! (ImplicitUnwrappedOptional) ключевое слово в закрытии. Это не позволяет перекодировать код ObjC. просто удалите! от закрытия.

func makeGet(place:NSString , completionHandler: (String! , Bool!) -> Void) 

в

func makeGet(place:NSString , completionHandler: (String , Bool) -> Void) 
2

Я вижу, что в Swift обработчик завершения имеет два аргумента: String и Bool, тогда как в вашем вызове Objective-C вы передаете блок без каких-либо аргументов. Я думаю, что это может быть причиной ошибки.

Try:

[[DataAPI new] makeGet:@"" completionHandler:^(NSString* string, BOOl b){ 

}];

+0

Этот код не работает Андрей, но спасибо за указание на проблему. +1 – Vizllx

0

Попробуйте добавить public ключ к вашему классу и func

@objc public class DataAPI: NSObject { 
    public func makeGet(place:NSString , completionHandler: (String! , Bool!) -> Void) 
    { 
     var str:String = "" 
     let manager = AFHTTPSessionManager() 

     manager.GET("https://api.com", parameters: nil, success: 
      { (operation, responseObject) -> Void in 
       str = "JSON: \(responseObject!.description)" 
       print(str) 

       completionHandler(str,false) //str as response json, false as error value 

      }, 
        failure: { (operation,error: NSError!) in 
         str = "Error: \(error.localizedDescription)" 
         completionHandler("Error",true) 
     }) 

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