gpt4 book ai didi

Swift 类型 'string.index' 没有下标成员

转载 作者:搜寻专家 更新时间:2023-11-01 05:56:27 25 4
gpt4 key购买 nike

我目前正在将 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")
}
}
}

最佳答案

Swift 中的字符串不是索引集合,相反,您可以访问四种不同 View 之一:字符、UTF8、UTF16 或 unicodescalars。

这是因为 Swift 支持 unicode,其中单个字符实际上可能由多个 unicode 标量组成。

这是一篇真正帮助我解决这个问题的帖子:https://oleb.net/blog/2016/08/swift-3-strings/

无论如何,要回答您的问题,您需要使用 index(after:)index(before:)index( _, offsetBy:).

在你的情况下你想做这样的事情:

line.index(line.endIndex, offsetBy: -2) // second to last character

此外,您可能会发现直接使用 String.Index 类型而不是 Int 进行迭代更容易:

let line = "hello"

var i = line.startIndex
while i < line.endIndex {
print(line[i])
i = line.index(after: i)
}
// prints ->
// h
// e
// l
// l
// o

关于Swift 类型 'string.index' 没有下标成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41514986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com