Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String Swift:在索引处安全获取字符_String_Swift - Fatal编程技术网

String Swift:在索引处安全获取字符

String Swift:在索引处安全获取字符,string,swift,String,Swift,使用内置方法,可以通过以下方式访问字符串索引i处的元素: let s = "string" s[advance(s.startIndex,i)] 但是,如果i超出范围,则会导致运行时错误。如果索引超出范围,是否有一种内置方法来实现这一点,并使其返回nil?考虑到几乎所有东西都存在可选链接,我希望这是可用的。有–advance的第二个版本采用了第三个参数,一个不超出以下范围的索引: let s = "string" let idx = advance(s.startIndex, i, s.en

使用内置方法,可以通过以下方式访问字符串索引i处的元素:

let s = "string" 
s[advance(s.startIndex,i)]

但是,如果
i
超出范围,则会导致运行时错误。如果索引超出范围,是否有一种内置方法来实现这一点,并使其返回
nil
?考虑到几乎所有东西都存在可选链接,我希望这是可用的。

有–advance的第二个版本采用了第三个参数,一个不超出以下范围的索引:

let s = "string"
let idx = advance(s.startIndex, i, s.endIndex)
不幸的是,它比您希望的使用方式更精细。如果您这样做:

let s = "string"
let idx = advance(s.startIndex, 10, s.endIndex)
然后仍然会出现运行时错误,因为
endIndex
不是下标的有效索引

你有两种选择,都需要额外的支票。检查
idx!=s、 endIndex
。或者检查
!s、 isEmpty
如果没有,则执行
s[advance(s.startIndex,i,s.endIndex.preforcent())]

(此处必须检查字符串是否为空,原因有二:一是如果为空,则下标无效;二是如果
startIndex==endIndex
endIndex.preference()
无效)

最后,要注意将来自
startIndex
advance
调用放在一个循环中<代码>前进从一个点开始不是一个恒定的时间操作,它是线性的。因此,如果在字符串长度的循环中调用它,则算法将是二次的。如果需要遍历字符串,最好通过不断增加索引来完成,或者更好地使用更高级别的函数,如
map
filter