任何方式来迭代一个元组在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类型。您必须将其转换回原始类型的值。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |