加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 05:59:41 所属栏目:百科 来源:网络整理
导读:我很好奇如何做一个for循环与一个元组在swift。 我知道,要访问每个成员,你可以使用点表示法使用索引号 var tupleList = ("A",2.9,3,8,5,6,7,9)for each in tupleList { println(each)} //错误:类型不符合协议序列 是的你可以! func iterateC,R(t:C,block
我很好奇如何做一个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类型。您必须将其转换回原始类型的值。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读