2015-12-07 29 views
0

我在Objective-C中有一個方法,它接受一個參數並返回一個塊中的結果。如何通過橋接頭將此結果返回到快速塊?注意我有其他非阻塞函數返回,這工作正常。從Objective-C到Swift的Swift pass模塊

Objective-C的

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

橋接報

? 

斯威夫特

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

} 
+0

......需要一個參數,並在塊返回一個結果......? ?你的函數不會返回任何東西,但無效。 – user3441734

+0

這就是問題 - performMethod應該如何構造,以便可以通過橋接頭將塊中的結果返回到快速方法。我引用的塊位於onSuccess: –

+0

再次檢查我的「筆記」。你objectiv函數不會返回任何塊。它返回void。你宣稱你的swift代碼的「原型」與你的目標C代碼沒有任何關係。你問如何將你的目標代碼翻譯成swift嗎? – 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