如何修复 Swift 3 中已删除的 C 样式语句?

瓦伦纳哈里亚

我正在将旧的 Swift 2 代码转换为 Swift 3,但在转换以下 for 循环时遇到困难

for (var nSize = merkleTree.count; nSize > 1; nSize = (nSize + 1) / 2)
{
    //...
}

SO上有很多类似的问题,但我没有找到任何适用于我的问题的解决方案或者我不明白。

我认为下面的代码可以工作,但它给出了错误。

for var nSize in merkleTree.count.stride(to:1, by:(nSize+1)/2)

使用未解析的标识符“nSize”

米兰诺萨

我认为这不能再使用 for 编写了,但是您可以使用while循环来完成工作:

var nSize = merkleTree.count
while nSize > 1 {
    // loop body

    nSize = (nSize + 1) / 2
}

我希望stride在这种情况下不起作用,因为正如您的错误所述,您不能nSize用作stride参数 -nSize是基于范围声明的迭代变量,因此您需要存在范围。至少这是我对错误的解释(我知道理论上您可以根据先前生成的项目生成范围,但显然stride不能那样工作)。

我相信你可以找到一种方法来使用reduce(因为我能够,见下文,也许你可以让它更简单),或者通过实现你自己的stride接受闭包而不是步骤(这将允许您根据前一项计算下一项),但是这两种方法都比使用简单的 while 循环更复杂和晦涩,所以我个人更喜欢while循环。

我不太好的reduce实现(结果它使用一个数组而不是一个范围,因为通过查看NSRange我认为你不能创建一个不以1为单位的范围):

let merkleTree = [1,2,3,4,5,6,7,8,9]

let numberOfDivisions = Int(log2(Double(merkleTree.count))) + 1
let startValue = merkleTree.count
let nSizes = (0..<numberOfDivisions).reduce([startValue]) { (result, next) -> [Int] in
    var newResult = result
    newResult.append((result.last! + 1) / 2)
    return newResult
}
print(nSizes)
// and now you can for-in it:
for nSize in nSizes {
    // ...
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Swift 3中修复警告“不赞成使用C样式的语句”

来自分类Dev

如何修复C样式的语句?

来自分类Dev

无法调用“ copyBytes”和“ C语言样式的Swift 3中的语句已被删除”尝试将项目更新为Swift 3

来自分类Dev

#warning:C风格的for语句已弃用,并将在以后的Swift版本中删除

来自分类Dev

如何删除FMDB swift 3中的记录

来自分类Dev

如何更改 AlertController Swift 3 的样式

来自分类Dev

如何从代码中删除C样式的注释

来自分类Dev

如何修复JS中边框角的样式?

来自分类Dev

修复了 tableView 函数的“已弃用并将在 Swift 4 中删除”警告

来自分类Dev

如何修复我的 def 函数中的 if 语句

来自分类Dev

如何使用xcode修复内存泄漏(Swift 3)

来自分类Dev

如何修复Rails 3中缺少的模板?

来自分类Dev

在Bootstrap 3中,如何修复导航栏?

来自分类Dev

如何从 IOS Swift 3 中的饼图部分删除文本?

来自分类Dev

如何从打印中删除 () (swift3)

来自分类Dev

如何在React Native中更改语句中的单词样式?

来自分类Dev

如何修复C ++中的多个定义错误?

来自分类Dev

如何修复C中的细分错误

来自分类Dev

如何在C ++中修复这些错误?

来自分类Dev

如何修复C中的“内存泄漏”

来自分类Dev

如何在c3js中设置样式折线图点的样式

来自分类Dev

在 Swift 3 中修复可滚动 TableViewCell 上方的 MapView

来自分类Dev

如何在Swift 2.2中为循环替换复杂的C样式

来自分类Dev

如何修复Swift 5.1中的“使用未声明类型”错误?

来自分类Dev

如何在Mac Project中修复main.swift?

来自分类Dev

如何修复 Swift 中的“无法使单元格出列”错误

来自分类Dev

如何在Swift中更改字体样式

来自分类Dev

如何修复内核已删除的系统?

来自分类Dev

如何使用Swift 3正确表达此'rangeOfCharacter'语句?

Related 相关文章

  1. 1

    在Swift 3中修复警告“不赞成使用C样式的语句”

  2. 2

    如何修复C样式的语句?

  3. 3

    无法调用“ copyBytes”和“ C语言样式的Swift 3中的语句已被删除”尝试将项目更新为Swift 3

  4. 4

    #warning:C风格的for语句已弃用,并将在以后的Swift版本中删除

  5. 5

    如何删除FMDB swift 3中的记录

  6. 6

    如何更改 AlertController Swift 3 的样式

  7. 7

    如何从代码中删除C样式的注释

  8. 8

    如何修复JS中边框角的样式?

  9. 9

    修复了 tableView 函数的“已弃用并将在 Swift 4 中删除”警告

  10. 10

    如何修复我的 def 函数中的 if 语句

  11. 11

    如何使用xcode修复内存泄漏(Swift 3)

  12. 12

    如何修复Rails 3中缺少的模板?

  13. 13

    在Bootstrap 3中,如何修复导航栏?

  14. 14

    如何从 IOS Swift 3 中的饼图部分删除文本?

  15. 15

    如何从打印中删除 () (swift3)

  16. 16

    如何在React Native中更改语句中的单词样式?

  17. 17

    如何修复C ++中的多个定义错误?

  18. 18

    如何修复C中的细分错误

  19. 19

    如何在C ++中修复这些错误?

  20. 20

    如何修复C中的“内存泄漏”

  21. 21

    如何在c3js中设置样式折线图点的样式

  22. 22

    在 Swift 3 中修复可滚动 TableViewCell 上方的 MapView

  23. 23

    如何在Swift 2.2中为循环替换复杂的C样式

  24. 24

    如何修复Swift 5.1中的“使用未声明类型”错误?

  25. 25

    如何在Mac Project中修复main.swift?

  26. 26

    如何修复 Swift 中的“无法使单元格出列”错误

  27. 27

    如何在Swift中更改字体样式

  28. 28

    如何修复内核已删除的系统?

  29. 29

    如何使用Swift 3正确表达此'rangeOfCharacter'语句?

热门标签

归档