Swift:创建具有已定义值数量的 UInt8 数组

Swift: Create Array of UInt8 with defined number of Values

如何在 Swift 中创建 UInt8Array? 我已经用下面的代码试过了:

var array: [UInt8] = [UInt8]()

现在我想遍历第二个 UInt 变量 a :

for var i: Int = 0; i < a.count; i++ {
    array[i] = UInt8(a[i]^b[i])
}

但随后出现以下错误:

fatal error: Array index out of range

当我将与​​ a -> [0x01,0x01,0x01,0x01,0x01] 相同的位放入变量 array 时,循环工作正常!

有人知道为什么吗?

您可以像这样使用 Array 中的 init(count: Int, repeatedValue: Element) :

var array = [UInt8](count: 5, repeatedValue: 0x01)

要了解有关数组初始值设定项的更多信息,请查看此处:http://swiftdoc.org/swift-2/type/Array/

您可以使用 第二个数组的计数,以免索引超出范围错误。

var array = [UInt8](count: a.count, repeatedValue: 0x00)

或者你可以在你的循环中使用数组的追加方法。

for var i:Int = 0; i < a.count; i++
{
   array.append( UInt8(a[i]^b[i]) )
}

来自Collection Types 在 Swift 文档中:

You can’t use subscript syntax to append a new item to the end of an array.

有不同的可能解决方案:

创建具有所需大小的数组,如@Fantattitude 所说:

var array = [UInt8](count: a.count, repeatedValue: 0)
for var i = 0; i < a.count; i++ {
    array[i] = UInt8(a[i]^b[i])
}

或者从一个空数组开始,追加元素, 正如@Christian 刚刚回答的那样:

var array = [UInt8]()
for var i = 0; i < a.count; i++ {
    array.append(UInt8(a[i]^b[i]))
}

但是在你的情况下 "swifty" 方式是 zip()map():

的函数式方法
// Swift 1.2 (Xcode 6.4):
let array = map(zip(a, b), { [=12=] ^  })
// Swift 2 (Xcode 7):
let array = zip(a, b).map { [=12=] ^  }

zip(a, b) returns所有数组元素对的序列 (如果两者中较短的数组用完则停止)。 map() 然后计算每对的 XOR 和 returns 结果为 一个数组。