2015-04-23 18 views

Odpowiedz

49

można utworzyć rozszerzenia:

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

Można użyć NSString na characterAtIndex do osiągnięcia tego ...

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

'" a ".characterAtIndex (0)' działa. – vacawama

2

sposób” ponowne robienie tego jest słuszne. Jeśli nie podoba gadatliwość indeksowania, można tego uniknąć poprzez cykliczne przechodzenie przez Unicode skalarów:

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

Rzeczywiście można pominąć break w tym przypadku, oczywiście, ponieważ jest tylko jeden Unicode skalarne .

Lub przekonwertować do tablicy i używać Int indeksowania (w ostateczności desperatów):

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

nieco krótszą drogę robi to może być:

first(singleChar.unicodeScalars)!.value 

jak w przypadku w wersji podrzędnej, spowoduje to awarię, jeśli Twój ciąg znaków jest pusty, więc jeśli nie jesteś w 100% pewny, użyj opcjonalnego: Albo, jeśli chcesz być ekstra-paranoidalny,

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

Oto moja realizacja, zwraca tablicę wartości ASCII.

extension String { 

    func asciiValueOfString() -> [UInt32] { 

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

Uwaga: Tak, jest kompatybilny z Swift 2.

5

Teraz w Xcode 7.1 i 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]) 

lub

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

Zarówno druk 99. Roboty dowolny znak ASCII.

0

Istnieje również inicjator UInt8 (ascii: Unicode.Scalar) na UInt8.

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