过滤类型为 Any 的变量



我有以下类和构造函数:

class List<T> {
var value: T
var next: List<T>?
init(_ items: Any...) {
}

构造函数可以接受如下内容:let list = List<Any>(List<Int>(7, 2), 6, List<Any>(3, List<Int>(5, 1)))

我在构造函数中的目标是按特定顺序过滤掉数字 7,2,6,3,5,1,当然它们可以是字符串,因为它是一个模板。我尝试的是

init(_ items: Any...) {
for info in items 
{
if let str = info as? T {
if let str2 = info as? List<T> {
}
else
{
print("this is primitive (info)")
}

}
} 

但是,当我的结果是我得到:

this is primitive 7
this is primitive 2
this is primitive 5
this is primitive 1
this is primitive 3
this is primitive main.List<Swift.Int>
this is primitive main.List<Swift.Int>
this is primitive 6

所以我似乎没有过滤掉主要的。列出并且也不按顺序排列,任何想法我如何实现这一目标?

首先,处理 varargs 的顺序似乎不是顺序的,而是对init(_ items: Any...)的递归调用,所以我认为你不能得到你想要的顺序。

关于 main.list 是原始来自调用的打印

init(3, List<Int>(5, 1)

其中 T 是 Any 和 3,List 对象分别是 T 的实例。如果您将打印添加为init的第一行,这将变得更加清晰

print(items)

下面是我的初始化测试版本

init(_ items: Any...) {
print(items)
for item in items {
switch item {
case is List<T>:
print("Is list")
case is T:
print("Primitive (item)")
default:
print("Other stuff")
}
}
}

最新更新