Optionalを含んだクロージャ引数があるSwiftメソッドをObjective-Cから使おうとしたらエラーが出たので回避した


nilかそうでないかで処理を分けるために、クロージャの引数をOptionalにしたSwiftのメソッドがあったのですが、
Objective-Cから使用するために@objc属性を付加したら、エラーが出て使えませんでした。

エラー内容

Method cannot be marked @objc because the type of the parameter 4 cannot be represented in Objective-C

🙅‍♂️エラーが出たメソッド定義

ViewController.swift
@objc public func go(completion: (SomeType?) -> ())

🙆‍♂️エラー回避のための代替策

引数と戻り値を囲み、クロージャ自体をOptionalにする

ViewController.swift
@objc public func go(completion: ((SomeType) -> ())?)

引数をOptionalにすることを諦める

ViewController.swift
@objc public func go(completion: (SomeType) -> ())

この時の選んだ回避策

実際に行った回避策としては、クロージャを2つに分けました。

ViewController.swift
@objc public func go(success: (SomeType) -> (), failure: (SomeType) -> ())

あまり、遭遇機会もないかと思いますが、備忘録として書き残しておきます。