我正在尝试将一个对象方法作为参数传递给另一个期望具有相同签名的闭包的函数。我看过this没有任何成功。
// these are just dummy protocols to make my example run in Playground without include Alamofire or SwiftyJSON
public struct Response<Value, Error: ErrorType> { }
public protocol SwiftyJSONSerializable { }
public protocol ResponsePathProvider { }
class MyClass1 {
func responseObject<T:SwiftyJSONSerializable>(keyPath path:String, completionHandler: Response<[String:T], NSError> -> Void) -> Self {
return self
}
}
class MyClass2 {
func test() {
let mc = MyClass1()
mc.responseObject(keyPath: "/*/", completionHandler: testable) //fails
mc.responseObject(keyPath: "/*/", completionHandler: self.dynamicType.testable(self)) //fails
}
func testable<T:SwiftyJSONSerializable>(response: Response<[String:T], NSError> -> Void) {
//NOOP
}
}
最佳答案
首先,可测试的功能应该是:
func testable<T:SwiftyJSONSerializable>(response: Response<[String:T], NSError>) {
//NOOP
}
正确遵守类型。
不幸的是,我认为这要么是泛型与协议(protocol)相关的当前限制,要么是一个错误。如果您只是将 SwiftyJSONSerializable 更改为一个类,它就可以工作。
关于ios - 如何将实例方法作为闭包参数传递给另一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35905119/