2016-04-13 12 views
0

Ich versuche, einen bestimmten Codeblock nur ausgeführt werden, wenn das iPhone des Benutzers von einem bestimmten Modell ist. Ich teste auf dem iOS Simulator, also habe ich die Funktion iPhoneModel() unten verwendet, um das Gerätemodell für den Simulator zu erhalten und es auf die Konsole zu drucken und in die if-Bedingung in der compare()-Funktion einzufügen.Vergleicht zwei identische Zeichenfolge, aber sie werden als falsch bewertet

func iPhoneModel() -> String { 
    var sysinfo = utsname() 
    uname(&sysinfo) // ignore return value 
    return NSString(bytes: &sysinfo.machine, length: Int(_SYS_NAMELEN), encoding: NSASCIIStringEncoding)! as String 
} 

func compare() { 
    if iPhoneModel() == "x86_64" { 
     print("It Worked!") 
    } 
} 

Die iPhoneModel() Funktion sollte eine identische Zeichenfolge zurück, und die Aussage wahr sein sollte, sondern es ist falsch. Ich habe sogar beide Saiten auf die Konsole gedruckt, um sie mit meinen eigenen Augen zu überprüfen, und sie scheinen beide identisch zu sein, doch der Computer denkt anders. Irgendwelche Ideen warum?

+0

Können Sie einen Debugger den Code nacheinander gründlich zu treten? –

+0

Drucken Sie die Längen beider Zeichenfolgen, um sicherzustellen, dass dort keine abschließenden Leerzeichen enthalten sind. – dasblinkenlight

+0

Vielleicht konvertieren Sie auch die NSString in eine reguläre Zeichenfolge vor dem Vergleich –

Antwort

0

Ich glaube, Sie könnten nur die Null-Zeichen Streifen aus ...

func iPhoneModel() -> String { 
    var sysinfo = utsname() 
    uname(&sysinfo) // ignore return value 

    var iPhoneModel = NSString(bytes: &sysinfo.machine, length: Int(_SYS_NAMELEN), encoding: NSASCIIStringEncoding)! as String 

    iPhoneModel = iPhoneModel.stringByReplacingOccurrencesOfString("\0", withString: "", options: NSStringCompareOptions.LiteralSearch, range: nil) 

    return iPhoneModel 
} 
Verwandte Themen