Быстрый эквивалент моего блока 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
}
Другие вопросы по тегам