2015-04-23 4 views

Antwort

49

Sie eine Erweiterung erstellen:

Xcode 8 • Swift 3

extension String { 
    var asciiArray: [UInt32] { 
     return unicodeScalars.filter{$0.isASCII}.map{$0.value} 
    } 
} 
extension Character { 
    var asciiValue: UInt32? { 
     return String(self).unicodeScalars.filter{$0.isASCII}.first?.value 
    } 
} 

Character("a").asciiValue // 97 
Character("á").asciiValue // nil 

"abc".asciiArray   // [97, 98, 99] 
"abc".asciiArray[0]   // 97 
"abc".asciiArray[1]   // 98 
"abc".asciiArray[2]   // 99 
9

können Sie verwenden NSString characterAtIndex ist, dies zu erreichen ...

var singleCharString = "a" as NSString 
var singleCharValue = singleCharString.characterAtIndex(0) 
println("The value of \(singleCharString) is \(singleCharValue)") // The value of a is 97 
+0

'" ein ".characterAtIndex (0)' funktioniert. – vacawama

2

Die Art und Weise‘ Es ist richtig. Wenn Sie nicht die Ausführlichkeit der Indizierung möchten, können Sie es vermeiden, indem sie durch die Unicode-Skalare Radfahren:

var x : UInt32 = 0 
let char = "a" 
for sc in char.unicodeScalars {x = sc.value; break} 

Sie können tatsächlich die break in diesem Fall natürlich nicht angeben, da es nur eine Unicode-Skalar .

Oder in ein Array umwandeln und Int Indizierung (die letzte Mittel der Verzweifelten) verwenden:

let char = "a" 
let x = Array(char.unicodeScalars)[0].value 
2

Ein etwas kürzeren Weg, dies zu tun sein könnte:

first(singleChar.unicodeScalars)!.value 

Wie bei der tiefgestellte Version, dies stürzt ab, wenn Ihre Zeichenfolge tatsächlich leer ist. Wenn Sie sich nicht 100% ig sicher sind, verwenden Sie das optionale:

Oder, wenn Sie extra paranoid sein wollen,

if let char = first(singleChar.unicodeScalars) where char.isASCII() { 
    let ascii = char.value 
} 
3

Hier ist meine Implementierung, es gibt einen Array der ASCII-Werte.

extension String { 

    func asciiValueOfString() -> [UInt32] { 

     var retVal = [UInt32]() 
     for val in self.unicodeScalars where val.isASCII() { 
      retVal.append(UInt32(val)) 
     } 
     return retVal 
    } 
} 

Hinweis: Ja, es ist Swift 2 kompatibel.

5

Jetzt in Xcode 7.1 und Swift 2,1

var singleChar = "a" 

singleChar.unicodeScalars.first?.value 
5
UnicodeScalar("1")!.value // returns 49 

Swift 3,1

0
var singchar = "a" as NSString 

print(singchar.character(at: 0)) 

Swift 3,1

0

Swift 4

print("c".utf8["c".utf8.startIndex]) 

oder

let cu = "c".utf8 
print(cu[cu.startIndex]) 

Beide Druck 99 Werke für jede ASCII-Zeichen.

0

Es gibt auch den UInt8 (ascii: Unicode.Scalar) Initialisierer auf UInt8.

var singleChar = "a" 
UInt8(ascii: singleChar.unicodeScalars[singleChar.startIndex]) 
Verwandte Themen