Swift:扫描仪扫描程序无法正常工作

Swift:扫描仪扫描程序无法正常工作,swift,parsing,swift5,nsscanner,Swift,Parsing,Swift5,Nsscanner,我正在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

我正在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?

E和M前缀上的scanDouble扼流圈。如果您知道这些是什么,您可以将它们添加到忽略列表:

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将其删除:


此外,还应该检查scanDouble的返回值。顺便说一句,这种方法从iOS 13开始就被弃用了。

我已经添加了示例值-E1.00英寸、E1.50英寸、M0.88英寸我刚刚编辑了post。首先,我只是添加了arr[4]的示例字符串值。也许你和我之间有些困惑。谢谢你的回答。但E1.00英寸、E1.50英寸、M0.88英寸仅为样本串。第一个字符可以是其他字母字符-D或B。但很明显,第一个字符是字母字符,第二个字符串是数字,最后一个单词是英寸。你能给我提供其他的解决方案吗?如果你知道它只有一个字符,请使用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)
    }
}