Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查对象是否为';是';在Swift中属于泛型_Swift_Generics_Swiftui - Fatal编程技术网

检查对象是否为';是';在Swift中属于泛型

检查对象是否为';是';在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

我想在SwiftUI的
视图
协议中添加一个扩展,根据实际的视图类型改变行为:

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我试图覆盖
扩展中的一个,这是不可行的。事实证明,不管怎么说,这基本上是一件荒谬的事情。嗯,如果愿意的话,人们可能会让这个方法变得通用。