ios - Swift "Scanner"陷入死循环

标签 ios swift

我有一个格式类似于此的 CSV

"1.0","remainder1",
"2.0","remainder2",
"3.0","remainder3",
"4.0","remainder4",
"5.0","remainder5"

我希望使用以下方法扫描并打印这些值:

    var textScanner: Scanner = Scanner(string: textToScan)
    textScanner.charactersToBeSkipped = CharacterSet(charactersIn: "\",")

    var value: Double = 0.0
    var remainder: NSString?

    while !textScanner.isAtEnd {

        textScanner.scanDouble(&value)
        textScanner.scanUpTo("\n", into: &remainder)

        print("value \(value)")
        print("remainder \(remainder)")

        print("\n newline \n")
    }

它正确地识别出 value 是一个 double ,而 remainder 是一个字符串。但它陷入了无限循环,一遍又一遍地打印相同的结果。

如果我从扫描 double 更改为扫描字符串,那么它会向前移动并正确完成:

textScanner.scanUpTo(",", into: &value)

但我真的想将第一个值直接扫描到 double 而不是 string,然后将其转换回 double特殊原因。

在我的第一个实现中我缺少什么来让它工作?

谢谢!

最佳答案

一些评论:

  1. 始终检查 scan... 的返回值,以确保它确实扫描了您的想法。
  2. scanUpTo 不包括您正在扫描的字符串。所以扫描仪仍然指向换行符,而不是换行符之后的字符。
  3. 只在需要的地方声明变量。

您的代码应该更像这样:

var textScanner: Scanner = Scanner(string: csv)
textScanner.charactersToBeSkipped = CharacterSet(charactersIn: "\",")

var cnt = 0 // for testing only

while !textScanner.isAtEnd {
    var value: Double = 0.0
    var remainder: NSString?

    if textScanner.scanDouble(&value) && textScanner.scanUpTo("\n", into: &remainder) {
        // Ignore the newline
        textScanner.scanString("\n", into: nil)

        print("value \(value)")
        print("remainder \(remainder)")

        print("\n newline \n")
    } else {
        print("oops")
    }

    // For testing to avoid infinite loop    
    cnt += 1
    if cnt > 10 {
        break
    }
}

关于ios - Swift "Scanner"陷入死循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50195389/

相关文章:

ios - 将文字写入透明的UIImage

iphone - 在 iOS 中使用应用内购买购买不同的应用

ios - AutoLayout 调整自定义 UIView 内容

ios - Swift 动画外壳不会动画

swift - 无法在 Swift 4.2 中撤消、重做和再次撤消

ios - swift 全局变量在另一个类中保持为空

ios - 按下 UIImageView 时记录的 Touch Up Outside 事件

ios - 导入 Monkeytalk 项目

ios - 当与添加到 subview 的 UITableView 一起使用时,prefersLargeTitles 无法按预期工作

ios - 如何使用MapKit在Swift 3中更改图钉颜色