1. ホーム
  2. ios

[解決済み] swift : ブロック宣言のようなクロージャ宣言

2023-03-13 01:38:53

質問

Objective-Cでは、以下のようにブロックを宣言することができます。

typedef void (^CompletionBlock) (NSString* completionReason);

これをswiftでやろうとするとエラーが出ます。

func completionFunction(NSString* completionReason){ }
typealias CompletionBlock = completionFunction

エラー: 未定義の'completionFunction'を使用しています。

定義:

var completion: CompletionBlock = { }

どうすればいいのか?

更新してください。

jtbandesさんの回答によると、以下のように複数の引数を持つクロージャを作成することができるようです。

typealias CompletionBlock = ( completionName : NSString, flag : Int) -> ()

どのように解決するのですか?

この の構文は、関数型 (in) -> out .

typealias CompletionBlock = (NSString?) -> Void
// or
typealias CompletionBlock = (result: NSData?, error: NSError?) -> Void

var completion: CompletionBlock = { reason in print(reason) }
var completion: CompletionBlock = { result, error in print(error) }

入力タイプを囲む括弧は、Swift 3+の時点でのみ必要であることに注意してください。