2014-06-07 7 views
6

Otrzymuję typ unichar zwrócony z metody instancji NSStringcharacterAtIndex(Int) i chcę porównać ją z typem Swift String. Czy istnieje prosty sposób na zrobienie tego?Konwertuj unichar na String?

var str = "#ffffff" 
var unichar = (str as NSString).characterAtIndex(0) 
var unicharString = // Perform magic 
var containsHash = unicharString == "#" // Should return `true` 

Dzięki

+3

Dlaczego nie 'var containsHash = str.hasPrefix (" # ")'? – Sulthan

Odpowiedz

2
var str:String = "#ffffff" 
var unichar = str[str.startIndex] 
var unicharString = "\(unichar)" 
var containsHash = unicharString == "#" 
+0

Zadaję dziś najprostsze pytania, co? – aleclarson

+0

Ten jest trochę dziwny. Uzyskanie znakuAtIndex z NSString w zasadzie zwraca wartość Int, której nie można bezpośrednio porównać z łańcuchem Swift. Czy istnieje szczególny powód, dla którego korzystasz z characterAtIndex? – Dash

+0

Cóż, na początku spróbowałem 'str [0]', które nie działało. Nie wiedziałem o 'String.Index', więc właśnie użyłem' NSString.characterAtIndex'. Nie wiedziałem też, że String ma rzeczywiście dostęp do całego API NSStringa (zmieniona nazwa 'NSString.length' na' utf16count') – aleclarson

8

Korzystanie UnicodeScalar przekonwertować unichar do sznurka lub znak (element String).

var str = "#ffffff" 
var unichar = (str as NSString).characterAtIndex(0) 
var unicharString = Character(UnicodeScalar(unichar)) 
var containsHash = unicharString == "#" 
  • unichar jest alias Uint16 (typealias unichar = UInt16).
  • UnicodeScalar ma init(_ v: UInt16).
  • Znak (element ciągu) ma init(_ scalar: UnicodeScalar).

Uwaga: Ciąg ma również init(count: Int, repeatedValue c: UnicodeScalar), ale nie nadaje się do tego przypadku.

+0

Dzięki! Działa to doskonale w Swift 2.0. – Jacob

+0

I 'String (UnicodeScalar (unichar))' dla konwersji ciągów znaków. –