任何方式来迭代一个元组在swift?

前端之家收集整理的这篇文章主要介绍了任何方式来迭代一个元组在swift?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我很好奇如何做一个for循环与一个元组在swift。

我知道,要访问每个成员,你可以使用点表示法使用索引号

var tupleList = ("A",2.9,3,8,5,6,7,9)

for each in tupleList {
    println(each)
}

//错误:类型不符合协议序列

是的你可以!
func iterate<C,R>(t:C,block:(String,Any)->R) {
    let mirror = reflect(t)
    for i in 0..<mirror.count {
        block(mirror[i].0,mirror[i].1.value)
    }
}

瞧!

let tuple = ((false,true),42,42.195,"42.195km")
iterate(tuple) { println("\($0) => \($1)") }
iterate(tuple.0){ println("\($0) => \($1)")}
iterate(tuple.0.0) { println("\($0) => \($1)")} // no-op

注意,最后一个不是一个元组,所以没有发生任何事情(虽然它是一个1元组或“单个”哪些内容可以访问.0,反射(它).count是0)。

有趣的是,iterate()可以迭代其他类型的集合。

iterate([0,1])              { println("\($0) => \($1)") }
iterate(["zero":0,"one":1]) { println("\($0) => \($1)") }

这个集合包括类和struct!

struct Point { var x = 0.0,y = 0.0 }
class  Rect  { var tl = Point(),br = Point() }
iterate(Point()) { println("\($0) => \($1)") }
iterate(Rect())  { println("\($0) => \($1)") }

注意:作为块的第二个参数传递的值是Any类型。您必须将其转换回原始类型的值。

猜你在找的Swift相关文章