1

如何在 Swift中创建Arrayof ?UInt8我已经使用以下代码进行了尝试:

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

现在我想循环第二个UInt变量a

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

但后来我收到以下错误:

致命错误:数组索引超出范围

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

有人知道为什么吗?

4

3 回答 3

10

来自 Swift 文档中的集合类型:

您不能使用下标语法将新项目附加到数组的末尾。

有不同的可能解决方案:

正如@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]))
}

但是,在您的情况下,“迅速”的方式将是一种功能性方法zip()and map()

// Swift 1.2 (Xcode 6.4):
let array = map(zip(a, b), { $0 ^ $1 })
// Swift 2 (Xcode 7):
let array = zip(a, b).map { $0 ^ $1 }

zip(a, b)返回所有数组元素对的序列(如果两者中较短的数组用尽,则停止)。map() 然后计算每对的 XOR 并将结果作为数组返回。

于 2015-08-07T09:49:17.400 回答
5

你可以这样使用init(count: Int, repeatedValue: Element)Array

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

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

于 2015-08-07T09:42:42.593 回答
2

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

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

或者您可以在循环中使用数组的 append 方法。

for var i:Int = 0; i < a.count; i++
{
   array.append( UInt8(a[i]^b[i]) )
}
于 2015-08-07T09:48:41.187 回答