it-roy-ru.com

Как конвертировать Swift Character в строку?

Я хочу вернуть первую букву String как String вместо Character:

func firstLetter() -> String {
    return self.title[0]
}

Однако с учетом вышеизложенного я получаю Character is not convertible to String. Как правильно преобразовать символ в строку?

Этот ответ предлагает создать расширение индекса, но объявление для String уже имеет метод индекса:

subscript (i: String.Index) -> Character { get }

Этот ответ устарел, или это две разные вещи?

22
Snowman

Почему вы не используете строковую интерполяцию, чтобы преобразовать символ в строку?

return "\(firstChar)"
25
Sascha L.

Просто первый персонаж? Как насчет:

var str = "This is a test"
var result = str[str.startIndex..<str.startIndex.successor()] // "T": String

Возвращает строку (как и следовало ожидать с нижним индексом строки) и работает, пока есть хотя бы один символ.

Это немного короче, и, возможно, может быть немного быстрее, но, на мой взгляд, не совсем ясно:

var result = str[str.startIndex...str.startIndex]
9
Matt Gibson

Начиная с Swift 2.3/3.0 + вы можете сделать что-то вроде этого:

func firstLetter() -> String {
    guard let firstChar = self.title.characters.first else {
        return ""  // If title is nil return empty string
    }
    return String(firstChar)
}

Или, если вы в порядке с дополнительной строкой:

func firstLetter() -> String? {
    guard let firstChar = self.title.characters.first else {
       return nil
    }
    return String(firstChar)
}

Обновление для Swift 4 , также думаю, что расширение лучше

extension String{
func firstLetter() -> String {
    guard let firstChar = self.first else {
        return ""
    }
    return String(firstChar)
}
4
nCod3d

Я провел несколько исследований по тому же типу вопроса и нашел способ получить любой символ из любой строки:

func charAsString(str:String, index:Int) -> String {
    return String(Array(str)[index])
}

и для первого персонажа, которого вы называете

var firstCharAsString = firstLetter("yourString",0)

Я пока не очень хорош в программировании, но думаю, что это будет делать то, что вы хотите

Правка:

Упрощено для ваших нужд:

func firstChar(str:String) -> String {
    return String(Array(str)[0])
}

Я надеюсь, что это то, что вам нужно

3
P1kachu

Я пытался получить отдельные символы из проанализированного String в String . Поэтому я хотел B из helpAnswer в формате String, а не в формате CHARACTER, чтобы я мог распечатать отдельные символы в текстовом поле .. Это прекрасно работает , Я не знаю об эффективности этого . Но это работает. Swift 3.0
Спасибо всем за помощь .....

var helpAnswer = "ABC"
var String1 = ""
var String2 = ""
var String3 = ""


 String1 = (String(helpAnswer[helpAnswer.index(helpAnswer.startIndex, offsetBy: 0)]))
 String2 = (String(helpAnswer[helpAnswer.index(helpAnswer.startIndex, offsetBy: 1)]))
 String3 = (String(helpAnswer[helpAnswer.index(helpAnswer.startIndex, offsetBy: 1)])
0
ChopinBrain
let str = "My String"
let firstChar = String(str.characters.first!)
0
Warif Akhand Rishi