在[快速]中将[Int]转换为(Int),反之亦然

时间:2018-03-08 10:53:02

标签: ios arrays swift

如何转换int数组

let beforeSorting = [1, 2, 3, 4, 0, 6, 7, 8, 9, 10]

(1, 2, 3, 4, 0, 6, 7, 8, 9, 10)

快速反过来了?

方案

var a: Int = 0
var b: Int = 0
var c: Int = 0

..likewise 20 variables

我想对这些值应用一些操作,因此我将值转换为数组,如

let array = [a, b, c,..] // counting 20 elements

应用排序等操作后。我需要将这些值放回属性。

所以我用这些属性制作了一个元组。这是我的问题。如何将我的新数组分配给元组。 (一次设置所有属性)

就像(a, b, c, d..) = myarray

一样

2 个答案:

答案 0 :(得分:1)

元组必须具有预定义的大小和类型。所以你所能做的就是有一些方便,可以通过很多方式完成。例如,您可以创建一个包装器:

typealias MyTuple = (a: Int, b: Int, c: Int, d: Int, e: Int, f: Int)
class ToupleWrapper {
    private var values: [Int]
    init(a: Int, b: Int, c: Int, d: Int, e: Int, f: Int) {
        values = [a, b, c, d, e, f]
    }
    convenience init(array: [Int]) {
        self.init(a: array[0], b: array[1], c: array[2], d: array[3], e: array[4], f: array[5])
    }
    convenience init(tuple: MyTuple) {
        self.init(a: tuple.a, b: tuple.b, c: tuple.c, d: tuple.d, e: tuple.e, f: tuple.f)
    }
    var array: [Int] {
        return values
    }
    var tuple: MyTuple {
        return (values[0], values[1], values[2], values[3], values[4], values[5])
    }
}

用法:

func foo() {
    let arrayFromValue = ToupleWrapper(a: 3, b: 2, c: 1, d: 4, e: 2, f: 2).array
    let arrayFromTouple = ToupleWrapper(tuple: (0, 1, 3, 2, 4, 2)).array
    let tupleFromArray = ToupleWrapper(array: [2, 3, 1, 4, 2, 2]).tuple
}

答案 1 :(得分:0)

不,你不能以安全的方式做到这一点。元组具有在编译时已知的固定长度,而数组上的长度是在运行时获得的。

将元组转换为数组是可能的,但只有当所有元组元素属于同一类型或具有共同类型时 - 您才能简单地引用它的.0 ... .10元素。