gpt4 book ai didi

ios - 在 swift 中检查多类型转换

转载 作者:行者123 更新时间:2023-12-01 17:35:44 26 4
gpt4 key购买 nike

目前我正在尝试进行多类转换以执行一些操作,例如 UIBarButtonItem 或 UIControl。

有没有办法在同一条线上同时做这两个事情?喜欢:

if let x = sender as? UIControl, sender as? UIBarButtonItem {
print (x)
}

我已经尝试了很多方法,但仍然无法在一行中转换多个类。

谢谢。

最佳答案

Swift 是一种静态类型语言。所有变量都具有在编译时已知的单一类型。与动态类型语言(Python、Ruby、Smalltalk、Javascript 等)不同,没有办法直接做这样的事情:

let x: String or Int
if condition { x = 123 }
else { x = "string" }

想象一下,如果可能的话:如果 x 是一个 Stringsqrt(x) 的值是多少?如果 x 是一个 Intx.uppercased() 的值是多少?

相反,此类“或类型”被编码为枚举(明确枚举所有受支持的成员作为具有关联值的案例)或协议(protocol)。协议(protocol)还有一个额外的好处,即它们明确说明了符合类型的预期行为,并且它们对 future 类型的一致性是开放的。

最通用的协议(protocol)是Any,它捕获所有类型。它的通用性既是它的优点也是它的缺点。虽然您可以为其分配任何值,但您可以直接对其进行很少的操作,因为所有类型支持的操作非常少。

在您的情况下,最合适的做法是制定一个协议(protocol),向其添加您想要访问的任何功能,并使其符合您想要的类型。

protocol Fooable {
func foo()
}

extension UIControl: Fooable {
func foo() {
print("I am a UIControl!")
}
}

extension UIBarButtonItem: Fooable {
func foo() {
print("I am a UIBarButtonItem!")
}
}

if let fooableThing = sender as? Fooable {
fooableThing.foo()
}

关于ios - 在 swift 中检查多类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54083689/

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