1

我在 Objective-C 中有一个方法,它接受一个参数并在一个块中返回一个结果。如何通过桥接头将此结果返回到 swift 块?注意我有其他非块函数返回,这工作正常。

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 {

}
4

1 回答 1

0

问题是您的目标 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)"
*/
于 2015-12-07T11:38:05.847 回答