簡體   English   中英

如何在 swift 中創建具有特定類型別名的閉包?

[英]How to create closure with specific typealias in swift?

我正在使用 swift package OnboardKit ,它需要一種我無法弄清楚的特定閉合類型。 class OnboardPage需要類型OnboardPageAction作為參數action

public typealias OnboardPageCompletion = ((_ success: Bool, _ error: Error?) -> Void)
public typealias OnboardPageAction = (@escaping OnboardPageCompletion) -> Void
OnboardPage(title: "Title",
            description: "description",
            action: action)

這是我最近的嘗試,我嘗試了這些方面的幾種變化。

let action: ((_ success: Bool, _ error: Error?) -> ()) = {_,_ in
    print("help")
}

XCode 失敗並顯示錯誤消息:

無法將類型“(布爾,錯誤?) - > Void”的值轉換為預期的參數類型“OnboardPageAction?” (又名'可選<(@escaping(布爾,可選)->())->()>')

我在這里做錯了什么? 是我的閉包定義錯誤還是我在 OnboardPage() 調用中使用它的方式錯誤? 謝謝:)

(我在這里了解了有關閉包的詳細信息Closures Swift How To ,但我無法定義 package 期望的正確閉包類型)

從上下文來看,我猜想action參數的目的是讓您在出現OnboardPage時運行一些代碼。 這個“動作”可能需要一些時間(當action返回時它可能不會完成),因此它為您提供了一個完成處理程序參數,您可以調用該參數來指示您想要做的事情已經完成。

如果你只是想打印 Hello,你可以在打印 hello 之后調用參數來表明你完成了你想要做的事情:

OnboardPage(title: "Title",
        description: "description",
        action: { completion in
            print("Hello")
            completion(true, nil)
        })

或者干脆

OnboardPage(title: "Title",
        description: "description") {
            print("Hello")
            $0(true, nil)
        }

第一個參數表示操作是否成功,第二個參數包含一個可選的錯誤,當它失敗時。

動作的聲明應如下所示以匹配提供的定義:

let action: OnboardPageAction = { (_ closure: ((_ success: Bool, _ error: Error?) -> Void)) in
    print("action")
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM