我使用的是swift软件包OnboardKit,它需要我无法弄清的特定封闭类型。
类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失败,并显示错误消息:
无法将'(Bool,Error?)-> Void'类型的值转换为预期值 参数类型“ OnboardPageAction?” (aka'Optional <(@@ escaping(Bool, 可选)->())->()>')
我在这里做错了什么?是关闭定义中的错误,还是在OnboardPage()调用中使用错误的方式?谢谢:)
(我在Closures Swift How To处了解了有关闭包的详细信息,但我无法定义程序包期望的正确的闭包类型)
答案 0 :(得分:1)
从上下文来看,我猜想A
参数的目的是允许您在显示action
时运行一些代码。此“操作”可能要花一些时间(返回OnboardPage
时可能不会完成),因此它为您提供了一个完成处理程序参数,您可以调用该参数来指示您想要完成的操作。
如果只想打印Hello,则可以在打印hello之后调用该参数,以表明您已完成想要做的事情:
action
或者简单地
OnboardPage(title: "Title",
description: "description",
action: { completion in
print("Hello")
completion(true, nil)
})
第一个参数表示操作是否成功,第二个参数表示操作失败时的可选错误。
答案 1 :(得分:1)
动作声明应类似于提供的定义:
let action: OnboardPageAction = { (_ closure: ((_ success: Bool, _ error: Error?) -> Void)) in
print("action")
}