Swift 将元组转换为数组?
我正在Swift项目中访问一个Swift 将元组转换为数组?,swift,Swift,我正在Swift项目中访问一个C语言结构,该结构将数据存储为元组,我想对其进行迭代 let tuple = (1, 2, 3, 4, 5) 好吧,我有两个选择。第一个是镜像元组,以便将其反射映射到数组中: let tupleMirror = Mirror(reflecting: tuple) let tupleArray = tupleMirror.children.map({ $0.value }) as! [Int] 第二种选择是使用手动内存管理将其转换为数组,并使用类似于不安全缓冲区指
C
语言结构,该结构将数据存储为元组,我想对其进行迭代
let tuple = (1, 2, 3, 4, 5)
好吧,我有两个选择。第一个是镜像元组,以便将其反射映射到数组中:
let tupleMirror = Mirror(reflecting: tuple)
let tupleArray = tupleMirror.children.map({ $0.value }) as! [Int]
第二种选择是使用手动内存管理将其转换为数组,并使用类似于不安全缓冲区指针的东西。从我所读到的所有内容来看,如果可能的话,通常建议避免手动内存路径,
Mirror
显然会这样做。镜像是将元组转换为数组的安全/可靠方法吗?还是有更好的方法将元组转换为数组,甚至迭代元组本身?Mirror
是一条直线
扩展数组{
init?(主体的mirrorchildvalues:subject){
guard let数组=镜像(反射:主题).children.map(\.value)为?Self
else{return nil}
self=数组
}
}
xctasertequal(
数组(mirrorChildValuesOf:(1,2,3,4,5)),
[1, 2, 3, 4, 5]
)
XCTAssertNil(
[Int](mirrorChildValuesOf:(1,2,3,4,5))
)
元组是否总是任意长度?为什么要将其保留为元组?为什么不从一开始就使用数组?@MaximKosov长度是恒定的。我不想把它作为一个元组。在我的示例中,我已将其转换为数组。修改C代码不是一个选项(第三方依赖关系)。因此,如果长度是常量,比如说5,您可以只编写一个常规函数吗?类似于let arr=[tuple.0,tuple.1,…]
?类似于苹果论坛上他们建议使用的UsafeBufferPointer
。老实说,我认为元组的大小不可能是恒定的