当前位置: 首页 > 面试题库 >

Swift 3.0在String.Index范围内迭代

逑俊楚
2023-03-14
问题内容

Swift 2.2可以实现以下功能:

let m = "alpha"
for i in m.startIndex..<m.endIndex {
    print(m[i])
}
a
l
p
h
a

使用3.0,我们会收到以下错误:

类型“范围”(又名“范围”)不符合协议“序列”

我正在尝试对字符串进行快速的非常简单的操作-只需遍历字符串的前半部分(或更常见的问题:遍历字符串的范围)。

我可以执行以下操作:

let s = "string"
var midIndex = s.index(s.startIndex, offsetBy: s.characters.count/2)
let r = Range(s.startIndex..<midIndex)
print(s[r])

但是这里我并没有真正遍历字符串。所以问题是:如何遍历给定字符串的范围。喜欢:

for i in Range(s.startIndex..<s.midIndex) {
    print(s[i])
}

问题答案:

您可以使用以下indices属性来遍历字符串characters

let letters = "string"
let middle = letters.index(letters.startIndex, offsetBy: letters.characters.count / 2)

for index in letters.characters.indices {

    // to traverse to half the length of string 
    if index == middle { break }  // s, t, r

    print(letters[index])  // s, t, r, i, n, g
}

从“ 字符串和字符-计数字符”
部分的文档中:
__

扩展字素簇可以由一个或多个Unicode标量组成。这意味着不同的字符(以及同一字符的不同表示形式)可能需要存储不同数量的内存。因此,Swift中的字符在字符串表示中不会各自占用相同数量的内存。
结果,如果不迭代字符串 以确定其扩展字素簇边界, 就无法计算字符串中的字符数

强调是我自己的。

这将不起作用:

let secondChar = letters[1] 
// error: subscript is unavailable, cannot subscript String with an Int


 类似资料:
  • 有一个非常常见且简单的任务是在两个方向上通过某个范围进行循环迭代: 上面的代码运行完美,但我花了大约一个小时试图摆脱双重检查。 有没有办法解决如果没有如果?也许是一句话?

  • 问题内容: 我想知道为什么在 i 变量下面的代码中 仍然显示“ 5” 而不是显示 “ 1” 然后 “ 2” 然后 “ 3” ,依此类推?必须是一个范围问题,但由于在全局和dom范围中更改了i变量的范围,但仍然遇到相同的问题,因此我并没有真正了解它。当我提醒 我 的AJAX功能外,它工作得很好。 这是小提琴 编辑: 我选择了 @Tushar Gupta 解决方案,因为它最适合我的需要,但是又遇到了另

  • 对于我的Java类,我正在编写一个小程序,首先选择一个介于1和100之间的数字。然后,它会提示用户开始猜测正确的。如果用户对的猜测过高或过低,程序会打印出一个新范围,供他们在该范围内进行猜测。如果用户输入或,程序只需重新要求用户输入,但不会以任何方式更改范围。 示例输出(当机密号为20时)如下所示: 该项目似乎已经基本完成,但只有一个例外。其中一个要求是,当用户键入的超出我们给定的1和100范围时

  • Go的范围可以在地图和切片上迭代,但我想知道是否有一种方法可以在一系列数字上迭代,比如: 或者有没有一种方法来表示Go中的整数范围,就像Ruby对类范围所做的那样?

  • 我是一个角度开发人员和新的反应,这是简单的反应组件,但不工作 错误:在JSX作用域中使用JSX React/React时,“React”必须在作用域中

  • 我的Windows8应用程序有一个持续存在的问题。