子数组在 Swift 3 中不起作用
Subarrays not working in Swift 3
在 Swift 3 中,我有两个这样声明的变量:
let patternArray = [true,true,false,true,true,false,true,true]
var resultArray = [Bool]()
稍后在我的代码中我有这个,以获取数组的一部分:
resultArray = patternArray [0..<4]
编译时收到此错误消息:
Cannot subscript a value of type '[Bool]' with an index of type 'CountableRange<Int>'
我不知道为什么。我犯了一些明显的错误吗?
我正在使用 Xcode 版本 8.3.2。
此外,我已经检查过这种语法在 Playground 中是否有效。
这是因为使用范围下标会给您 ArraySlice<T>
。
您正在尝试将 ArraySlice<Bool>
分配给 [Bool]
,这会导致类型不匹配。 swift 编译器显然太愚蠢了,无法指出这一点。 swift 编译器搜索 returns 和 [Bool]
的下标,但找不到任何下标,因此它告诉您不能下标……这是一个非常奇怪的逻辑。也许这会在 Swift 4.
中得到修复
只需初始化一个新的[Bool]
:
resultArray = [Bool](patternArray[0..<4])
let patternArray = [true,true,false,true,true,false,true,true]
var resultArray = [Bool]()
resultArray = Array(patternArray[0..<4])
使用 CountableRange returns ArraySlice 类型的索引订阅数组,这有助于 "share" 原始数组的底层内存。为了能够将 ArraySlice 分配给 Array 类型的变量,必须将所有值复制为一个独立的 Array。最简单的方法是使用适当的构造函数创建数组,如我的示例所示。
var arr = [1,2,3,4]
let arrslice = arr[1..<3]
for i in arrslice.indices {
arr[i] = 0
}
print(arr, arrslice)
打印
[1, 0, 0, 4] [2, 3]
更有趣:-)
arr[1..<3] = arrslice
print(arr)
打印
[1, 2, 3, 4]
在 Swift 3 中,我有两个这样声明的变量:
let patternArray = [true,true,false,true,true,false,true,true]
var resultArray = [Bool]()
稍后在我的代码中我有这个,以获取数组的一部分:
resultArray = patternArray [0..<4]
编译时收到此错误消息:
Cannot subscript a value of type '[Bool]' with an index of type 'CountableRange<Int>'
我不知道为什么。我犯了一些明显的错误吗?
我正在使用 Xcode 版本 8.3.2。
此外,我已经检查过这种语法在 Playground 中是否有效。
这是因为使用范围下标会给您 ArraySlice<T>
。
您正在尝试将 ArraySlice<Bool>
分配给 [Bool]
,这会导致类型不匹配。 swift 编译器显然太愚蠢了,无法指出这一点。 swift 编译器搜索 returns 和 [Bool]
的下标,但找不到任何下标,因此它告诉您不能下标……这是一个非常奇怪的逻辑。也许这会在 Swift 4.
只需初始化一个新的[Bool]
:
resultArray = [Bool](patternArray[0..<4])
let patternArray = [true,true,false,true,true,false,true,true]
var resultArray = [Bool]()
resultArray = Array(patternArray[0..<4])
使用 CountableRange returns ArraySlice 类型的索引订阅数组,这有助于 "share" 原始数组的底层内存。为了能够将 ArraySlice 分配给 Array 类型的变量,必须将所有值复制为一个独立的 Array。最简单的方法是使用适当的构造函数创建数组,如我的示例所示。
var arr = [1,2,3,4]
let arrslice = arr[1..<3]
for i in arrslice.indices {
arr[i] = 0
}
print(arr, arrslice)
打印
[1, 0, 0, 4] [2, 3]
更有趣:-)
arr[1..<3] = arrslice
print(arr)
打印
[1, 2, 3, 4]