检查对象是否为';是';在Swift中属于泛型
我想在SwiftUI的检查对象是否为';是';在Swift中属于泛型,swift,generics,swiftui,Swift,Generics,Swiftui,我想在SwiftUI的视图协议中添加一个扩展,根据实际的视图类型改变行为: extension View { func something() { switch self { case is Text: // Do stuff. case is Button<AnyView>: // Do other stuff default: // Do other other stuff
视图
协议中添加一个扩展,根据实际的视图类型改变行为:
extension View {
func something() {
switch self {
case is Text: // Do stuff.
case is Button<AnyView>: // Do other stuff
default: // Do other other stuff
}
}
}
扩展视图{
func某物{
开关自{
案例是文本://Do stuff。
案例是:做其他事情
默认://做其他事情
}
}
}
但是,任何按钮
类型都不符合is按钮
的情况。我不能指定泛型类型,也不能指定Any
。如何检查对象是否属于泛型类型
(显然,我不能使用额外的、更具体的扩展来覆盖此功能。)如果您的按钮集有限,则不考虑此功能的用途,可以使用以下类似的按钮集
extension View {
func something() -> Self {
switch self {
case is Text: // Do stuff.
print("> text")
case is Button<Text>: // Do other stuff
print("> text button")
case is Button<Image>: // Do other stuff
print("> image button")
default: // Do other other stuff
print("> other")
}
return self
}
}
扩展视图{
func something()->Self{
切换自身{
案例是文本://Do stuff。
打印(“>文本”)
案例是:做其他事情
打印(“>文本按钮”)
案例是:做其他事情
打印(“>图像按钮”)
默认://做其他事情
打印(“>其他”)
}
回归自我
}
}
颠倒你的想法。不要使用带开关的函数,而是在文本
和按钮
上创建一个函数。您所说的“显然,我不能使用其他更具体的扩展来覆盖此函数”是什么意思?您在每个案例中所做的工作是否都涉及到该类型的铸造?如果是这样的话,一个扩展确实是你所需要的。@Sweeper@Sulthan我试图覆盖扩展中的一个,这是不可行的。事实证明,不管怎么说,这基本上是一件荒谬的事情。嗯,如果愿意的话,人们可能会让这个方法变得通用。