问题是您的目标 C 函数返回 void,而不是某个块
如何快速处理阻塞?见下面的例子
// 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)"
*/