gpt4 book ai didi

swift - 您可以将对象的类型传递给函数吗?

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

我有一系列不同类型的 View Controller 。我希望能够检查数组是否包含各种类型。换句话说,是否有任何方法可以简化以下代码

for item in theArray
{
if item is ViewControllerTypeA
{
...
}
}
for item in theArray
{
if item is ViewControllerTypeB
{
....
}
}
for item in theArray
{
if item is ViewControllerTypeC
{
....
}
}

类似于

func doesArrayContainType(T)
{
for item in theArray
{
if item is T
{
....
}
}
}

有什么方法可以使用泛型吗?如果是这样的话,关于泛型的教程或引用都没有对我所看到的这种特殊情况有任何帮助。

最佳答案

是的,您可以将类型信息传递给方法

extension Sequence {
// gives you an array of elements that have the specified type
func filterByType<T>(_ type: T.Type = T.self) -> [T] {
return flatMap { $0 as? T }
}
}

上述函数将为您提供目标序列中与您要搜索的类型相匹配的元素列表。

只要编译器可以推断结果类型,您就可以在有或没有type 参数的情况下使用它:

let mixedArray: [Any] = [1, "2", 3, "4"]

// you need to pass the `type` parameter
mixedArray.filterByType(Int.self) // [1, 3]

// you don't need to pass the `type` parameter as the compiler
// can infer T by looking at the sorounding context
let strings: [String] = mixedArray.filterByType() // ["2", "4"]

关于swift - 您可以将对象的类型传递给函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48836202/

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