2015-12-07 3 views
0

У меня есть метод в Objective-C, который принимает параметр и возвращает результат в блоке. Как я могу вернуть этот результат через мостовой заголовок в быстрый блок? Примечание. У меня есть другие неблокирующие функции, и это работает нормально.Swift pass block от Objective-C до Swift

Objective-C

- (void)performMethod:(NSString*)myString 
    {  
     [self.class 
     doSomething:myString 
     onSuccess:^(NSArray * results) { 
      // Return results 
     } 
     onFailure:^(NSError * error) { 
      // Return error 
     }]; 
    } 

Bridging заголовка

? 

Swift

class.performMethod(myString:String)->(results) in NSArray { 

} 
+0

... принимает параметр и возвращает результат в блоке ... ?? ? ваша функция не возвращает ничего, кроме void. – user3441734

+0

Это был вопрос: как должен быть выполнен метод executeMethod, чтобы я мог вернуть результат в блок к быстрому методу через заголовок моста. Блок, на который я ссылаюсь, находится внутри onSuccess: –

+0

еще раз проверьте мои «заметки». функция objectiv c НЕ возвращает какой-либо блок. он возвращает пустоту. что вы заявляли как «прототип» вашего быстрого кода, ничего не имеет с вашим объективным кодом c. вы спрашиваете, как быстро перевести ваш объективный код? – user3441734

ответ

-1

беда в том, что ваша цель функция C возврат аннулируются, а не какой-то блок

как иметь дело с блоком в быстром? смотрите пример ниже

// this block takes an Int as parameter and returns an Int 
let myBlock: (Int)->Int = { i in 
    return i 
} 
let i = myBlock(10) 
print(i) // 10 
// this block takes no parameters and return an empty Array<Int> 
let myBlock2:()->Array<Int> = { Void in 
    return [Int]() 
} 
print(myBlock2.dynamicType) //() -> Array<Int> 
let arr = myBlock2() 
print(arr, arr.dynamicType) // [] Array<Int> 

от того, что я могу видеть в вашем коде, вы пытаетесь сделать что-то вроде

import Foundation 

func bar(str: String, onSucces:()-> NSArray, onError:()->NSError) { 
    // do something with str 
    if str == "alfa" { 
     // success 
     let arr = onSucces() 
     print(arr) 
    } else { 
     let err = onError() 
     print(err) 
    } 
} 

func foo(str: String) -> Void { 
    bar(str, onSucces: {() -> NSArray in 
     return NSArray(array: [str]) 
     }) {() -> NSError in 
      return NSError(domain: "error", code: -1, userInfo: nil) 
    } 
} 

foo("alfa") 
/* 
(
alfa 
) 
*/ 

foo("") 
/* 
Error Domain=error Code=-1 "(null)" 
*/ 
+0

дорогой проголосовавший, пожалуйста, объясните вам решение, поэтому я могу выполнить ваши требования в следующий раз. заранее спасибо! – user3441734