我有以下类和构造函数:
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")
}
}
}