2017-11-12 2 views
0

Ich muss einige formatierte Daten aus einer Zeichenfolge lesen und in zwei Variablen speichern. Die Zeichenkette hat folgendes Format:Swift 4 Cocoa lesen formatierte Daten in Variable

data = "(1234),(-567)" 

Die Nummern haben unterschiedliche Längen und Zeichen. Ich denke, das sollte einfach sein. Es wäre leicht, in C:

scanf(data, "(%d),(%d)", num1, num2) 

Aber in Swift, Ich ziehe mir die Haare aus versuchen, einen einfachen Weg zu finden, dies zu tun. Wie in anderen Antworten vorgeschlagen, habe ich versucht:

data.components(separatedBy: CharacterSet.decimalDigits.inverted) 

Allerdings übersieht minus Zeichen. Jede Hilfe wird sehr geschätzt!

Antwort

0

können Sie Scanner verwenden, wenn Sie benötigen scanf -ähnlichen Verhalten:

let data = "(1234),(-567)" 

var num1: CInt = 0 
var num2: CInt = 0 
let scanner = Scanner(string: data) 
if 
    scanner.scanString("(", into: nil), 
    scanner.scanInt32(&num1), 
    scanner.scanString("),(", into: nil), 
    scanner.scanInt32(&num2), 
    scanner.scanString(")", into: nil) 
{ 
    print(num1, num2) 
} else { 
    print("failed") 
} 
0

Ich mag reguläre Ausdrücke:

let data = "(1234),(-567)" 
let pattern = "\\((.*?)\\)" 
let reg = try! NSRegularExpression(pattern: pattern) 
let result = reg.matches(in: data, options: [], 
    range: NSMakeRange(0, data.utf16.count)) 
let numstrings = result.map {(data as NSString).substring(with: $0.rangeAt(1))} 
let nums = numstrings.map {Int($0)!} // I'm feeling lucky 
// [1234, -567]