[英]fatal error: Array index out of range Swift
在此示例中,我将创建一个新的Int
空数组,并希望将另一个数组中的某些字符添加到其中。 最初,在我的characters
数组中,我存储数字["1","","2","","3"]
然后在此数组中(我可能完全错了),我想遍历这些数字以产生一个具有这些数字[1,2,3]
的newarray
(本质上是删除它们之间的空格并使它们成为Int
类型)
据我了解,我已经创建了一个动态数组,即没有特定的大小,但是我遇到了这个错误: fatal error: Array index out of range
,我不确定为什么。 有人可以帮我澄清一下吗? 谢谢
do{
var data = try String(contentsOfFile: documentsDirectoryPath as String,
encoding: NSASCIIStringEncoding)
print(data)
let characters = Array(data.characters)
print(characters)
var newarray = [Int]()
for var index = 0; index <= characters.count ; ++index {
if characters[index] == " " {
index++
}
else{
newarray[index] = index
}
}
print(newarray)
}
catch{
print("error")
}
}
从该线程中的其他注释来看,您似乎正在尝试从看起来像"1, 2, 3"
的字符串中过滤空格和逗号 。 如果这是错误的,请纠正我。 完全SWIFTY解决方案是如下:
do {
var data = try String(contentsOfFile: documentsDirectoryPath as String, encoding: NSASCIIStringEncoding)
print(data)
let newarray = data.characters.filter { Int(String($0)) != nil }.map { Int(String($0))! }
} catch {
print("error")
}
filter
将返回一个Character
数组,该数组将转换为整数。 map
然后将采用该数组,然后将每个元素转换为整数。 我们必须将Character
转换为String
类型,因为没有Int
构造函数采用Character
。
您的代码中有几个问题,其中最重要的是您的方法不正确,因为它将字符串视为单个字符的集合,而您的问题则需要解析多位数。
更好的方法是将数组拆分为逗号,并从修剪后的结果中解析整数,如下所示:
let data = "12, 23, 345"
print(data)
let newarray = data.characters.split(){$0 == ","}.map{
Int(String.init($0).stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()))!
}
print(newarray) // 12, 23, 345
发生这种情况是因为您的newarray
没有容量。
尝试使用append
方法或创建具有如下功能的数组:
let newarray = [Int](count:charactes.count, repeatedValue: 0)
。
PS还请注意,您在for循环中犯了一个错误,应该使用<
而不是<=
并且在循环内忙于迭代器值是一个坏主意,在看到一个空格时将此var递增两次,确定要这样做吗?
而且您在Swift中使用了两种不良做法。 首先,您使用类似C的for循环,该循环将在Swift 3中删除。 ++
运算符也是如此。 它们也将被删除。
使用for-in
和+=
。 这将使您的代码更加敏捷。
根据您在注释中告诉的内容(您想要从数组中删除空格字符并获取新的字符),可以这样实现:
let newarray = characters.filter { $0 != " " }
另一种方法:
首先从String
删除所有空格,然后将其转换为Array
:
let trimmedData = data.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
let characters = Array(trimmedData.characters)
编辑:如果您只想保留数字:
let validNumbers = "1234567890"
let validSet = NSCharacterSet(charactersInString: validNumbers)
let trimmedData = data.stringByTrimmingCharactersInSet(validSet)
let characters = Array(trimmedData.characters)
更改此行:
for var index = 0; index <= characters.count ; ++index {
对此:
for var index = 0; index < characters.count ; ++index {
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.