2016-03-22 6 views
0

Ich benutze NSScanner, um eine Zeichenkette zu scannen und ein Doppel daraus zu extrahieren. Hier ist mein Sandbox-Code, um zu versuchen und zu lösen das ProblemNSScanner scanDouble UnsafeMutablePointer

let string = "maxage=1234567890" 
let scanner2 = NSScanner(string: string) 
scanner2.scanUpToString("=", intoString: nil) 
scanner2.scanString("=", intoString: nil) 
let maxage2:UnsafeMutablePointer<Double> = UnsafeMutablePointer<Double>() 
scanner.scanDouble(maxage2) 
print(scanner2.scanLocation) 
print(maxage2) 

druckt:

7 
0x0000000000000000 

So die ersten beiden Anrufe den ersten Teil des Strings Arbeit zu verbrauchen, aber dann eine doppelte Abtastung ist nicht Arbeiten.

Ich habe andere Lösungen zu sehen, die wie folgt aussehen:

var double = 0.0 
scanner.scanDouble(&double) 

Aber das scheint nicht mehr in Swift zu arbeiten. Vielleicht hat es in einer früheren Version gemacht?

Wie kann ich das beheben?

+0

Noch funktioniert für mich –

Antwort

0

Ich frage mich, ob Sie versehentlich einen Tippfehler hatten, indem Sie anstelle von scanner2.scanDouble verwenden?

Dies funktioniert für mich:

let string = "maxage=1234567890" 
let scanner2 = NSScanner(string: string) 
scanner2.scanUpToString("=", intoString: nil) 
scanner2.scanString("=", intoString: nil) 
var aDoubleNumber = 0.0 
scanner2.scanDouble(&aDoubleNumber) 
print(scanner2.scanLocation) 
print(aDoubleNumber) 
+0

Ja! das funktioniert. Komisch, ich habe so viele Dinge ausprobiert. Ich habe im Grunde genommen das versucht, und mir ist klar geworden, dass das, was ich getan habe, 'let aDoubleNumber' definiert wurde, so dass ich einen Kompilierfehler bekommen würde & mit non-inout Argument vom Typ UnsageMutablePointer 'verwendet wurde eine Referenz mit &. – gngrwzrd

Verwandte Themen