Быстрый эквивалент моего блока Objective-C
Я не могу понять, как вызвать блок Objective-C из Swift!
У меня есть следующий метод Objective-C:
- (void)myMethod:(NSDictionary *)selection success:(MyBlock)success;
Где MyBlock:
typedef void(^MyBlock)(BOOL success, NSDictionary* options);
Он либо жалуется, что не может разыграть:
"Cannot convert value of type '(Bool, Dictionary<AnyHashable, Any>) -> ()' to expected argument type 'MyBlock!' (aka 'ImplicitlyUnwrappedOptional<(Bool, Optional<Dictionary<AnyHashable, Any>>) -> ()>')"
или я получаю SIGABRT, когда пытаюсь вызвать метод из Swift, используя любое из следующего:
myInstance.myMethod(myOptions) { (success, options) in
...
}
myInstance.myMethod(myOptions) { (success: Bool, options: Dictionary<AnyHashable, Any>?) in
...
}
myInstance.myMethod(myOptions) { (success: Bool!, options: [AnyHashable: Any]?) in
...
}
myInstance.myMethod(myOptions, success: { (success, options) in
...
})
myInstance.myMethod(myOptions, success: { (success, options) in
...
} as MyBlock)
myInstance.myMethod(myOptions, success: { (success: Bool, options: Dictionary<AnyHashable, Any>?) in
...
})
myInstance.myMethod(myOptions, success: { (success: Bool!, options: Dictionary<AnyHashable, Any>?) in
...
})
myInstance.myMethod(myOptions, success: { (success: Bool!, options: Dictionary<AnyHashable, Any>?) in
...
} as MyBlock)
myInstance.myMethod(myOptions, success: { (success: Bool!, options: [AnyHashable: Any]?) in
...
})
myInstance.myMethod(myOptions, success: { (success: Bool, options: [AnyHashable: Any]?) in
...
})
Что я делаю?
1 ответ
Эквивалентный быстрый код вашего MyBlock: typedef void (^ MyBlock) (BOOL success, NSDictionary * options)
- (void)myMethod:(NSDictionary *)selection success:(MyBlock)success;
выглядит следующим образом: public typealias MyBlock = (Bool, [String: Any]) -> (Void)
func myMethod(selection: [String : Any], success: MyBlock)
поэтому, когда вы используете myMethod, например:
self.myMethod(selection: yourDictionary) { (success, options) -> (Void) in
//handle here
}