[英]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.