我知道这是一个非常新手的问题,但它已经让我好几天了,我似乎无法找到一个我真正理解的解决方案。
我正在尝试创建一个嵌套数组来存储纬度和经度,但是Xcode / playground会抛出EXC_BAD_INSTRUCTION错误。
我想声明,初始化和打印数组的内容。我做错了什么?
var arrayLocations:[[Float]] = []
arrayLocations[0] = [27.1750199, 78.0399665]
print("\(arrayLocations[0][0]) and \(arrayLocations[0][1])")
答案 0 :(得分:7)
您无法为索引0分配值,因为如果数组为空,则没有索引0。
您必须append
或insert
该项:
arrayLocations.append([27.1750199, 78.0399665])
答案 1 :(得分:0)
您无法为索引0分配值,因为如果没有索引0 数组是空的。
您必须追加或插入该项目:
arrayLocations.append([27.1750199,78.0399665])
我建议您使用此Collection
extension,这样您的代码就不会经常崩溃
extension Collection where Indices.Iterator.Element == Index {
/// Returns the element at the specified index if it is within bounds, otherwise nil.
subscript (safe index: Index) -> Generator.Element? {
return indices.contains(index) ? self[index] : nil
}
}
通过使用此功能,您只需使用if let
块
if let aLocation = arrayLocations[safe: 0] {
aLocation = [27.1750199, 78.0399665]
}
这确保即使您尝试访问索引0
的对象,您的代码也不会崩溃。
注意:此建议不是答案的一部分,而是改进代码的内容。
看起来你正在尝试创建一个纬度和经度数组。为latitude and longitude
对象使用数组并不是很明智。我建议您创建一个对象,它可以是struct
或typeAlias
例如:
struct CoordinateStruct {
var longitude: Float
var latitude: Float
}
/* or */
typealias CoordinateTypeAlias = (latitude: Float, longitude: Float)
/************************* */
// Your code would then look like this
var arrayLocations:[CoordinateStruct] = []
arrayLocations.append(CoordinateStruct(longitude: 27.12312312, latitude: 78.123123))
/* or */
var arrayLocations:[CoordinateTypeAlias] = []
arrayLocations.append((27.12312312, 78.123123))
// Which would make accessing them very easy and readable, like this.
if let aLocation = arrayLocations[safe: 0] {
print(aLocation.longitude)
print(aLocation.latitude)
// instead of this
print(aLocation[0]) // a person who reads your code won't understand this
print(aLocation[1]) // a person who reads your code won't understand this
}
答案 2 :(得分:0)
您无法将值分配到0位置,因为索引0为空。
您可以通过以下方式执行此操作 -
初始值 -
var arrayLocations:[[Float]] = [[0.00,0.00]]
arrayLocations[0] = [27.1750199, 78.0399665]
print("\(arrayLocations[0][0]) and \(arrayLocations[0][1])")
否则,您可以使用append
或insert
作为vadian的答案来执行此操作。