迁移到 Swift 3 的烦恼︰ String.CharacterView 对应 'startIndex'

标签: Xcode ios Swift
发布时间: 2017/1/29 22:08:40
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

代码︰

let startIndex = oldString.characters.index(oldString.startIndex, offsetBy: range.location)

let endIndex = String.Characterview corresponding to 'startIndex' .index(startIndex, offsetBy: 5)

在迁移到前 Swift 3,上面的行是︰

let endIndex = startIndex.advancedBy(5)

我知道医生说 advancedBy 应转换为︰

Collection.index(index, offsetBy: delta)

但当我做上面的代码时出现此错误︰

Protocol集合可以只用作泛型约束因为它有自我或关联类型的要求

问题︰

我需要在这里做的它是什么?我觉得这是简单的事情,我只是大麦缺少它。我一直在文档和互联网。

解决方法 1:

一般,你可以得到 String.Index 通过使用这些方法︰

  • startIndex
  • endIndex
  • index(before: String.Index)
  • index(after: String.Index)
  • index(i: String.Index, offsetBy: String.IndexDistance)
  • index(i: String.Index, offsetBy: String.IndexDistance, limitedBy: String.Index)

然后,您可以使用 String.substring 和往常一样。

let testStr = "1234567890abcdefghij"

//string length
let testStrLengh = testStr.characters.count

//get tail 10 characters
let tail1 = testStr[testStr.index(testStr.endIndex, offsetBy: -10)..<testStr.endIndex]
let tail2 = testStr.substring(from: testStr.index(testStr.endIndex, offsetBy: -10))

//get head 10 characters
let head1 = testStr[testStr.startIndex..<testStr.index(testStr.startIndex, offsetBy: 10)]
let head2 = testStr.substring(to: testStr.index(testStr.startIndex, offsetBy: 10))

//get centre 10 characters
let startIndex = testStr.index(testStr.startIndex, offsetBy: 5)
let endIndex = testStr.index(testStr.endIndex, offsetBy: -5)
let centreStr = testStr.substring(with: startIndex..<endIndex)
官方微信
官方QQ群
31647020