【发布时间】:2017-01-07 06:52:27
【问题描述】:
我目前正在将 C++ 代码转换为 Swift,但我遇到了一个问题。传递给函数的参数是一个字符串,而我遇到困难的地方是尝试根据字符串的倒数第二个字符设置变量以检查某个字符。
错误显示在这一行:
line[i-1]
我尝试将此值转换为 Int 但这不起作用:
Int(line[i - 1])
我还尝试查看采用 Int 的字符串的 startIndex 函数是否可以工作,但它没有:
line.startIndex[i - 1]
这是完整的功能:
func scanStringForSpecificCharacters(line: String){
var maxOpen: Int = 0;
var minOpen: Int = 0;
minOpen = 0;
maxOpen = 0;
var i = 0
while i < line.characters.count {
for character in line.characters {
//var c: Character = line[i];
if character == "(" {
maxOpen += 1;
if i == 0 || line[i - 1] != ":" {
minOpen += 1;
}
}
else if character == ")"{
minOpen = max(0,minOpen-1);
if i == 0 || line[i-1] != ":"{
maxOpen -= 1;
}
if maxOpen < 0{
break;
}
}
}
if maxOpen >= 0 && minOpen == 0{
print("YES")
}else{
print("NO")
}
}
}
【问题讨论】:
-
line.characters[i-1]也许 -
Xcode 抛出错误 'Cannot subscript a value of type 'String.characterView' with an index of type 'Int''。
-
看看How does String.Index work in Swift 3——你需要在字符串上使用
index(before:)。 -
是的,Hamish 是对的,
line.characters.index(before: i) -
你真正想要达到什么目的?你的函数计算什么?嵌套循环是故意的吗? – Swift 中可能有更好的方法。
标签: swift