Swift:扫描仪 scanDouble 无法正常工作

Swift: Scanner scanDouble doesn't work correctly

我正在 swift 中进行字符串解析,我使用的是 Scanner。 但主要问题是 scanner.scanDouble 和 scanner.scanFloat 不起作用。 这是我的代码:

var magnitude: Double = 0
let scanner = Scanner(string: magString) // magString sample values  are "E1.00 INCH", "E1.50 INCH", "M0.88 INCH"

scanner.scanDouble(&magnitude)

但在运行应用后,震级为0.0

如何从字符串中获取 1.00、1.50 和 0.88?

scanDouble 因“E”和“M”前缀而窒息。如果你知道这些是什么,你可以将它们添加到忽略列表中:

for str in ["E1.00 INCH", "E1.50 INCH", "M0.88 INCH"] {
    let scanner = Scanner(string: str)
    scanner.charactersToBeSkipped = CharacterSet(charactersIn: "EM")
    var magnitude = 0.0
    if scanner.scanDouble(&magnitude) {
        print(magnitude)
    }
}

或者,如果您知道它只有一个主角,请使用 dropFirst:

将其删除
for str in ["E1.00 INCH", "E1.50 INCH", "M0.88 INCH"] {
    let scanner = Scanner(string: String(str.dropFirst()))
    var magnitude = 0.0
    if scanner.scanDouble(&magnitude) {
        print(magnitude)
    }
}

此外,您应该检查 scanDouble 的 return 值。顺便说一句,从 iOS 13 开始不推荐使用此方法。