gpt4 book ai didi

swift - 有什么方法可以快速迭代元组?

转载 作者:IT王子 更新时间:2023-10-29 05:02:42 24 4
gpt4 key购买 nike

我很好奇如何在 swift 中使用元组执行 for 循环。

我知道要访问每个成员,您可以使用带索引号的点符号

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

for each in tupleList {
println(each)
}

//错误:类型不符合协议(protocol)顺序

最佳答案

是的,你可以!

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, reflect(it).count 为 0)。

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

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

那个集合包括 classstruct!

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)") }

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

关于swift - 有什么方法可以快速迭代元组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24299045/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com