Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.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 筛选任何类型的vararg_Swift - Fatal编程技术网

Swift 筛选任何类型的vararg

Swift 筛选任何类型的vararg,swift,Swift,我有以下类和构造函数: class List<T> { var value: T var next: List<T>? init(_ items: Any...) { } 类列表{ var值:T 下一步:列表? 初始(uu项:任何…){ } 构造函数可以接受以下内容: let list=list(list(7,2,6,list(3,5,1)) 我在构造函数中的目标是按特定顺序过滤掉数字7,2,6,3,5,1,当然它们可以是字符串,因为它是一个模板

我有以下类和构造函数:

class List<T> {
    var value: T
    var next: List<T>?

init(_ items: Any...) {

}
类列表{
var值:T
下一步:列表?
初始(uu项:任何…){
}
构造函数可以接受以下内容:
let list=list(list(7,2,6,list(3,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)")
             }


           }
        } 
init(u项:任何…){
查看项目中的信息
{
如果让str=info为?T{
如果让str2=信息作为?列表{
}
其他的
{
打印(“这是原语\(信息)”)
}
}
} 
然而,我的结果是:

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
这是原语7
这是原语2
这是原始5
这是原语1
这是原始3
这是原语main.List
这是原语main.List
这是原始6

因此,我似乎没有过滤掉main.List,也没有按顺序,有什么想法可以实现这一点吗?

首先,处理varargs的顺序似乎不是顺序的,而是对
init(u)items:any…
的递归调用,因此我认为您无法获得所需的顺序

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

init(3, List<Int>(5, 1)
下面是我的init测试版本

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")
        }
    }
}
init(u项:任何…){
打印(项目)
对于项目中的项目{
开关项{
病例列表:
打印(“Is列表”)
案例为T:
打印(“原语\(项目)”)
违约:
打印(“其他内容”)
}
}
}
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")
        }
    }
}