2014-10-25 3 views

ответ

4

Класс использования символов

var chars = [Character](str) 
1

stringValue из NSTextField фактически возвращает Swift строку, а не NSString:

let str = myTextField.stringValue // str is a String 

Вы получаете первый элемент с

let ch = str[str.startIndex] // ch is a Character 

NSString бы должны быть преобразованы в Swi фт строка первая:

let nsString : NSString = "@" 
let str = String(nsString) 
let ch = str[str.startIndex] 
+0

, почему это не работает 'ул [0]' – codester

+0

@codester: Поскольку индекс строка имеет тип 'String.Index' и не' Int' , Основной причиной является (вероятно) обработка сложных составных символов Юникода. –

+0

Из 'textfield' вы получаете' String', поэтому нет необходимости явно преобразовывать 'String' – codester

4

это должно быть так просто, как let characterFromString = Character(textField.text).

NSString автоматически мостик Свифта String и Character класса имеет инициализации, который принимает один символ String; см. документацию here.

Это требует, чтобы входная строка содержала один кластер графем (т. Е. Один символ), и поэтому вы можете проверить свой ввод до кастинга. Чуть более подробная версия выше будет:

let text = textField.text as String 
if countElements(text) == 1 { 
    let character = Character(text) 
    // do what you want 
} else { 
// bad input :-( 
} 
+0

Да, это лучше для одного символа, +1. –

Смежные вопросы