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 开始不推荐使用此方法。
我正在 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 开始不推荐使用此方法。