gpt4 book ai didi

ios - 为什么新的 iOS 14 UIControl Action 语法如此糟糕?

转载 作者:行者123 更新时间:2023-12-01 15:42:43 26 4
gpt4 key购买 nike

iOS 14 中的新功能,我们可以将 Action 处理程序直接附加到 UIControl:

    let action = UIAction(title:"") { action in
print("howdy!")
}
button.addAction(action, for: .touchUpInside)

它的方式很酷,但语法令人恼火。我必须先形成 UIAction。我必须给 UIAction 一个标题,即使该标题永远不会出现在界面中。有没有更好的办法?

最佳答案

首先,您不需要提供标题。这是(现在)合法的:

    let action = UIAction { action in
print("howdy!")
}
button.addAction(action, for: .touchUpInside)

其次,你真的不需要单独的行来定义 Action ,所以你可以这样说:

    button.addAction(.init { action in
print("howdy!")
}, for: .touchUpInside)

但是,这仍然令人恼火,因为现在我在 addAction 调用的中间有一个闭包。它应该是一个尾随 闭包!显而易见的解决方案是扩展:

extension UIControl {
func addAction(for event: UIControl.Event, handler: @escaping UIActionHandler) {
self.addAction(UIAction(handler:handler), for:event)
}
}

问题解决了!现在我可以用我本应一直被允许的方式说话了:

    button.addAction(for: .touchUpInside) { action in
print("howdy!")
}

[额外信息:这个故事中的发送者在哪里?它在 Action 中。 UIAction 有一个 sender 属性。所以在该代码中,action.sender 是 UIButton。]

关于ios - 为什么新的 iOS 14 UIControl Action 语法如此糟糕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63289112/

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