0

次のパラメーターを持つ CustomAlertView があります。

    public var title: String
    public var buttonText: String
    public var buttonAction: (() -> ())?

...専用の関数が次の方法で呼び出されます。

Button(action: {buttonAction() })

次のコードと関数を実行できます

   customAlert = CustomAlertView(title: "Item found",
                                      buttonText: "Take it",
                                      buttonAction: closePopup
        )

    showCustomAlert = true

...

  func closePopup() { showCustomAlert = false }

パラメータを使用していくつかの関数を追加したい

 closePopupAndGetItemWithID(1)

しかし、私はそれらを呼び出すことができず、次のように述べています。

タイプ '()' の値を予期される引数タイプ '(() -> ())' に変換できませんか?

パラメーターの有無にかかわらず関数を許可するには、CustomAlertView の var をどのように変換する必要がありますか?

誰でもこれが何を意味するのか説明できますか: (() -> ())?

4

1 に答える 1

1

引数を指定して関数を呼び出す新しいクロージャーを作成できます。

CustomAlertView(
   title: "Item found",
   buttonText: "Take it",
   buttonAction: { closePopupAndGetItemWithID(1) }
)

2番目の質問について:

誰でもこれが何を意味するのか説明できますか: (() -> ())?

Swift のクロージャの型注釈です。1 つ目()は、クロージャの引数です (この場合は引数なし)。2 番目は戻り値です。これはVoid、他のコードベースの場合と同じように見られる可能性が非常に高いです。次に、括弧で囲んで 1 つのステートメントとしてグループ化し?、オプションにします。

追加資料:

于 2021-06-03T20:55:01.483 に答える