Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.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
Arrays 在Swift中,是否有方法将数组元素分配给多个变量?_Arrays_Swift_Variable Assignment - Fatal编程技术网

Arrays 在Swift中,是否有方法将数组元素分配给多个变量?

Arrays 在Swift中,是否有方法将数组元素分配给多个变量?,arrays,swift,variable-assignment,Arrays,Swift,Variable Assignment,我有一个这样的长数组: let array = [1, 2, 3] var a, b, c:Int [a, b, c] = array 我想把所有元素的值分配给不同的变量,如下所示: let array = [1, 2, 3] var a, b, c:Int [a, b, c] = array 我知道使用元组是可能的,但我需要使用数组,而不需要单独处理每个变量。在可用的数组中,没有“数组模式”或类似的东西,因此无法在数组上进行模式匹配。但是,您可以做的是: let array = [1,

我有一个这样的长数组:

let array = [1, 2, 3]
var a, b, c:Int
[a, b, c] = array
我想把所有元素的值分配给不同的变量,如下所示:

let array = [1, 2, 3]
var a, b, c:Int
[a, b, c] = array
我知道使用元组是可能的,但我需要使用数组,而不需要单独处理每个变量。

在可用的数组中,没有“数组模式”或类似的东西,因此无法在数组上进行模式匹配。但是,您可以做的是:

let array = [1,2,3]
let (a, b, c) = (array[0], array[1], array[2])

如果数组少于3个元素,这将在运行时引发错误。

这很有用,但它不是内置的。而非变异的仿制药让它很痛苦

let(a,b,c)=[1,2,3]。tuple3!
///无法扩展元组的解决方法。
公共结构元组{
公共变量元素:元素
公共init(u元素:元素){
self.elements=元素
}
}
公共扩展元组{
//标记:-2-元组
///创建一个包含多个元素的新元组。
静态下标(
元组:元素,元素:元素2
)->(元素0、元素1、元素2)
其中Elements==(Element0,Element1){
(tuple.0,tuple.1,元素)
}
//标记:-3元组
///创建一个包含多个元素的新元组。
静态下标(
元组:元素,元素:元素3
)->(元素0、元素1、元素2、元素3)
其中Elements==(Element0、Element1、Element2){
(tuple.0,tuple.1,tuple.2,元素)
}
}
公共扩展序列{
typealias Tuple2=(元素,元素)
typealias Tuple3=(元素,元素,元素)
typealias Tuple4=(元素,元素,元素,元素)
var tuple2:tuple2?{makeTuple2()?.tuple}
var tuple3:tuple3?{makeTuple3()?.tuple}
var tuple4:tuple4?{makeTuple4()?.tuple}
private func makeTuple2()->(
tuple:Tuple2,
getNext:()->元素?
)? {
var iterator=makeIterator()
让getNext={iterator.next()}
警卫
设_0=getNext(),
让_1=getNext()
else{return nil}
返回((_0,_1),getNext)
}
私有函数makeTuple3()->(
tuple:Tuple3,
getNext:()->元素?
)? {
警卫
let(tuple,getNext)=makeTuple2(),
let element=getNext()
else{return nil}
返回(Tuple[Tuple,element],getNext)
}
私有函数makeTuple4()->(
tuple:Tuple4,
getNext:()->元素?
)? {
警卫
let(tuple,getNext)=makeTuple3(),
let element=getNext()
else{return nil}
返回(Tuple[Tuple,element],getNext)
}
}

问题是您为什么需要这个?只要使用集合索引而不是变量如果我有10个变量,并且我需要创建一个函数来根据数组更改它们的变量,我如何做到这一点而不单独指定每个变量只要使用数组本身。如果需要,您可以使用
inout
关键字。您需要的是一个包含所有属性的结构。简单,永远不会太迟。最好现在就修好,否则会升级。你真的是在建议这样的事情吗?是的。它应该在标准图书馆。这对我有用,谢谢