从 swift 3.0 中删除的 C 样式语句,successor() 不可用

Posted

技术标签:

【中文标题】从 swift 3.0 中删除的 C 样式语句,successor() 不可用【英文标题】:C style for statement removed from swift 3.0, successor() is unavailable 【发布时间】:2016-07-22 06:38:41 【问题描述】:

谁能帮我把这个for循环更新到swift 3.0。帮助表示赞赏。谢谢!

for var index = trimmedString.startIndex; index < trimmedString.endIndex; index = index.successor().successor() 

        let byteString = trimmedString.substringWithRange(Range<String.Index>(start: index, end: index.successor().successor()))
        let num = UInt8(byteString.withCString  strtoul($0, nil, 16) )
        data?.appendBytes([num] as [UInt8], length: 1)

    

【问题讨论】:

swift.org/migration-guide 【参考方案1】:

在 Swift 3 中,“集合移动它们的索引”,请参阅 A New Model for Collections and Indices Swift 进化。特别是,

let toIndex = string.index(fromIndex, offsetBy: 2, limitedBy: string.endIndex)

将索引 fromIndex 提高了 2 个字符位置,但仅 如果它符合有效的索引范围,则返回nil 除此以外。因此循环可以写成

let string = "0123456789abcdef"
let data = NSMutableData()

var fromIndex = string.startIndex
while let toIndex = string.index(fromIndex, offsetBy: 2, limitedBy: string.endIndex) 

    // Extract hex code at position fromIndex ..< toIndex:
    let byteString = string.substring(with: fromIndex..<toIndex)
    var num = UInt8(byteString.withCString  strtoul($0, nil, 16) )
    data.append(&num, length: 1)

    // Advance to next position:
    fromIndex = toIndex


print(data) // <01234567 89abcdef>

【讨论】:

嘿,谢谢,我不确定 offsetBy 参数?有什么意义? @ShashantDahikar:正如我所说,offsetBy: 2 将索引增加 2,就像 .successor().successor() 在您的 Swift 2 代码中所做的那样。

以上是关于从 swift 3.0 中删除的 C 样式语句,successor() 不可用的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3.0 无法从 UITableView 中删除一行

在 XCode 8.2 / Swift 3.0 中更改状态栏样式(没有“查看基于控制器的状态栏外观”)

Swift - 从 Double 中删除尾随零

iOS -Swift 3.0 -for(循环语句用法)

Swift 3.0 中的 Objective C 代码

在 Xcode 8 和 Swift 3.0 中删除覆盖后准备 segue 崩溃