Optionalを含んだクロージャ引数があるSwiftメソッドをObjective-Cから使おうとしたらエラーが出たので回避した
3188 ワード
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) -> ())
あまり、遭遇機会もないかと思いますが、備忘録として書き残しておきます。
Author And Source
この問題について(Optionalを含んだクロージャ引数があるSwiftメソッドをObjective-Cから使おうとしたらエラーが出たので回避した), 我々は、より多くの情報をここで見つけました https://qiita.com/Riscait/items/76fbffde4214b0d630c1著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .