这怎么可能创建Array的UInt8斯威夫特?我用以下代码尝试了这个:
var array: [UInt8] = [UInt8]()
Run Code Online (Sandbox Code Playgroud)
现在我想循环第二个UInt变量a:
for var i: Int = 0; i < a.count; i++ {
array[i] = UInt8(a[i]^b[i])
}
Run Code Online (Sandbox Code Playgroud)
但后来我收到以下错误:
致命错误:数组索引超出范围
当我在变量中放入相同的位a- >时[0x01,0x01,0x01,0x01,0x01],array循环工作正常!
有人知道为什么吗?
从 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])
}
Run Code Online (Sandbox Code Playgroud)
或者从一个空数组开始并附加元素,就像@Christian刚回答的那样:
var array = [UInt8]()
for var i = 0; i < a.count; i++ {
array.append(UInt8(a[i]^b[i]))
}
Run Code Online (Sandbox Code Playgroud)
然而,在您的情况下,"swifty"方式将是一种功能性方法,zip()并且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 }
Run Code Online (Sandbox Code Playgroud)
zip(a, b)返回所有数组元素对的序列(如果两者的较短数组都用完则停止).map()
然后计算每对的XOR并将结果作为数组返回.
你可以使用init(count: Int, repeatedValue: Element)的Array是这样的:
var array = [UInt8](count: 5, repeatedValue: 0x01)
Run Code Online (Sandbox Code Playgroud)
要了解有关Array初始化器的更多信息,请查看此处:http://swiftdoc.org/swift-2/type/Array/