Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 将元组转换为数组?_Swift - Fatal编程技术网

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] 第二种选择是使用手动内存管理将其转换为数组,并使用类似于不安全缓冲区指

我正在Swift项目中访问一个
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
。老实说,我认为元组的大小不可能是恒定的