我在这个问题上看到了其他人的问题和答案,但我仍然对发生的事情感到困惑。我看到的所有例子都很复杂,答案对这个问题非常具体,所以我很难解析案例的具体情况,而不是一般情况。
我有一个逗号分隔的字符串,带有可选的数字:
1,0,,,,0,10.7,,
所以我用:
var parts = oneLine.componentsSeparatedByString(",")
然后我对这些行进行各种处理,比如......
if parts[i].contains("ft") {
parts[i] = parts[i].replacingOccurrences(of: "ft", with: "")
if unit[possibleFields()[i]] == "in" { unit[possibleFields()[i]] = "ftin" }
}
到目前为止,代码工作正常。但后来我想解析非空值并将它们保存在字典中:
if parts[0].characters.count > 0 { data["I1"] = Int(parts[0]) }
Cannot subscript a value of type 'inout [String]' (aka 'inout Array<String>')
我认为inout
正在告诉我一些事情,但我无法想象这里的问题是什么。也没有修复它。我正在做的事情就是将部分改成别的东西,但我看不出那可能是什么,或者为什么这首先是一个错误(为什么你不能索引一个inout数组?)
答案 0 :(得分:1)
实际错误是将Int(parts [0])赋值给NSNumber。这需要一个类型转换:Int(parts [0])为? NSNumber您可能正在某处使用inout参数导致错误消息变得非常误导。
我在操场上检查过:
let oneLine = "1,0,,,,0,10.7,,"
var parts = oneLine.components(separatedBy:",")
var data : [String:NSNumber] = [:]
func putInDictionary(_ parts:inout [String])
{
if parts[0].characters.count > 0 { data["I1"] = Int(parts[0]) }
}
putInDictionary(&parts)
只有在将部件作为inout数组字符串传递时才会出错。
添加类型转换解决了它。