gpt4 book ai didi

ios - 使作为参数传递给另一个函数的函数可选?

转载 作者:行者123 更新时间:2023-11-28 07:37:47 28 4
gpt4 key购买 nike

我有一个 UIAlertController 的扩展,我用它来在我的应用程序中显示服务条款的弹出窗口。

我想要这个弹出窗口的两个版本:一个是用户可以接受或拒绝服务条款(在第一次使用应用程序时显示),另一个是用户可以阅读它们然后 < strong>关闭弹出窗口(随时显示在设置屏幕中)。

这两个弹出窗口非常相似,所以与其重写同一个函数两次,不如创建另一个调用 termsOfServiceAlert() 并修改参数的函数。但是,由于用户只能在调用 termsOfServiceAlternativeAlert() 时关闭 ToS,因此我需要制作 acceptdecline 参数可选。我知道如何对普通变量执行此操作,但我找不到方法使其适用于作为参数传递的函数。

这是代码片段:

extension UIAlertController {

static func termsOfServiceAlert(
title: String,
message: String?,
acceptText: String,
accept: @escaping ()->Void,
declineText: String,
decline: @escaping ()->Void) -> UIAlertController {

/* set up alert */

let acceptTermsHandler: (UIAlertAction) -> Void = { (alertAction in
accept()
}

let declineTermsHandler: (UIAlertAction) -> Void = { (alertAction in
decline()
}

let accept = "Accept"
alert.addAction(UIAlertAction(title: accept, style: .default, handler: acceptTermsHandler

let decline = "Decline"
alert.addAction(UIAlertAction(title: decline, style: .default, handler: declineTermsHandler

return alert
}

static func termsOfServiceAlternativeAlert(message: String, dismiss: String) -> UIAlertController {
/* ERROR - Nil is not compatible with expected argument type '() -> Void */
return termsOfService(
message: message,
acceptText: dismiss,
accept: nil,
declineText: nil,
decline: nil)
}
}

最佳答案

您需要将这些参数设为可选,然后作为nil 传递。这是修复,

extension UIAlertController {

static func termsOfServiceAlert(
title: String,
message: String?,
acceptText: String,
accept: (()->Void)?,
declineText: String?,
decline: (()->Void)?) -> UIAlertController {

/* set up alert */

let alert = UIAlertController.init(title: title, message: message, preferredStyle: .alert)
let acceptTermsHandler: (UIAlertAction) -> Void = { alertAction in
accept?()
}

let declineTermsHandler: (UIAlertAction) -> Void = { alertAction in
decline?()
}

alert.addAction(UIAlertAction(title: "Accept", style: .default, handler: acceptTermsHandler))

alert.addAction(UIAlertAction(title: "Decline", style: .default, handler: declineTermsHandler))

return alert
}

static func termsOfServiceAlternativeAlert(message: String, dismiss: String) -> UIAlertController {
/* ERROR - Nil is not compatible with expected argument type '() -> Void */
return termsOfServiceAlert(
title: "",
message: message,
acceptText: dismiss,
accept: nil,
declineText: nil,
decline: nil)
}
}

关于ios - 使作为参数传递给另一个函数的函数可选?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52974467/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com