Подтвердить что ты не робот

Swift Преобразование символа в строку

У меня проблема с преобразованием типа символа в тип String. Прежде всего, у меня есть расширение расширения String для нахождения n-го символа в String.

extension String {
    func characterAtIndex(index: Int) -> Character? {
        var cur = 0
        for char in self {
            if cur == index {
                return char
            }
            cur++
        }
        return nil
    }
}

Я получаю то, что хочу, с этим расширением класса. Однако, когда я использую этот n-й символ для заголовка своего пользовательского UIButton, выдается сообщение об ошибке. Мой класс Uibutton

class hareketliHarfler: UIButton {
    init(frame: CGRect) {
        super.init(frame: frame)
        // Initialization code
    }
    func getLetter(letter:String!){
        self.titleLabel.text = letter 
    }
}

Ошибка при попытке получить доступ к функции getLetter (letter: String). Вот пример основных кодов контроллера:

    var harfim = hareketliHarfler(frame: CGRectMake(100,100,100,100))
var str="This is my String"
var bufi=str.characterAtIndex(3)
    harfim.getLetter(bufi as AnyObject) ****

В * разделе я пытаюсь .getLetter(bufi),.getLetter(bufi as String) также пытаюсь изменить тип параметра функции. Посмотрите: func getLetter (буква: символ!) Или func getLetter (буква: AnyObject!)... и т.д. Не нашел пути. Нужна помощь по этому поводу. Спасибо вам

4b9b3361

Ответ 1

Ваша проблема довольно проста: функция characterAtIndex возвращает символ, а self.titleLabel.text - это String. Вы не можете конвертировать между ними неявно. Самый простой способ - превратить символ в строку с помощью инициализатора строки:

// ch will be Character? type.
if let ch = str.characterAtIndex(3) {
    // Initialise a new String containing the single character 'ch'
    harfim.getLetter(String(ch))
} else {
    // str didn't have a third character.
}

В отличие от других решений, это безопасно для необычных символов Unicode и не будет инициализировать потенциально большой массив или перебрать всю строку только для получения третьего символа.

Ответ 2

Как насчет простой String(theCharacter)

Работает в Swift 4

Ответ 3

Измените это:

var bufi=str.characterAtIndex(3)
harfim.getLetter(bufi as AnyObject)

:

harfim.getLetter(String(Array(str)[3]))

Итак, что происходит здесь:

  • мы создаем массив из нашей строки. Элементы массива - это символы из исходной строки. Такие нарушения правильно отслеживают символы, которые представлены последовательностями из двух или более кодовых точек. Например. emoji или флаг, отмеченный @MartinR.

  • Мы обращаемся к элементу на 4-й позиции.

Обратите внимание, что по мере того как мы кладем массив из исходной строки, лучше использовать этот метод только с короткими строками и избегать его в часто повторяющихся процедурах. Но в вашем случае это кажется ОК.