Как добавить символ в строку в Swift?

18

Это использовалось для работы в Xcode 6 Beta 5, теперь я получаю ошибку компиляции в бета-версии 6

for aCharacter : Character in aString {
    var str:String = ""
    var newStr:String = str.append(aCharacter) // ERROR
    ....
}

Ошибка . Невозможно вызвать 'append' с типом аргумента 'Character'

    
задан samatron 23.08.2014 в 03:29
источник
  • вы попробовали +? –  Daniel A. White 23.08.2014 в 03:31
  • Да. Это был оригинальный синтаксис, который я использовал, и дал эту ошибку: не может вызывать '+' с помощью списка аргументов типа '(Character, @lvalue String)' –  samatron 23.08.2014 в 04:52
  • append возвращает Void и только мутирует строку. –  Qbyte 16.08.2015 в 18:50

8 ответов

24

Обновление для движущейся цели: Swift:

У Swift больше нет оператора +, который может принимать строку и массив символов. (Существует метод string appendContentsOf() , который может быть использован для этой цели).

Лучший способ сделать это сейчас - ответ Мартина R в комментарии ниже:

var newStr:String = str + String(aCharacter)

Оригинальный ответ: Это изменилось в бета-версии 6. Проверьте примечания к выпуску. Я все еще загружаю его, но попробуйте использовать:

var newStr:String = str + [aCharacter]
    
ответ дан Gary Makin 23.08.2014 в 03:41
источник
  • Спасибо, что сработало. Думаю, я предполагаю, что массив символов - это строка? Не упоминается об этом конкретном синтаксисе в примечаниях к выпуску для бета-версии 6. –  samatron 23.08.2014 в 04:54
  • Возможно, это было яснее, но в нем говорится: «Вы все еще можете + два символа или строку с любой другой последовательностью символов или массива с любой другой последовательностью одного и того же типа элемента». Из этого я решил сделать символ в массив с синтаксисом []. –  Gary Makin 23.08.2014 в 05:00
  • var newStr: String = str + String (aCharacter) также работает. –  Martin R 23.08.2014 в 06:42
  • Над ответом возвращается «Строка» не идентична «Uint8». Думаю, последняя официальная версия отличается от бета-версии, используемой Гэри. Таким образом, правильный ответ, по-видимому, принадлежит Мартину Р. –  Thomas Kilian 24.11.2014 в 08:35
  • Это не работает в swift 2 –  smac89 17.02.2016 в 01:39
11

Это также работает

var newStr:String = str + String(aCharacter)
    
ответ дан baskInEminence 17.03.2015 в 20:00
источник
  • ... и я бы сказал, это способ «Swifter» сделать это. –  Grimxn 16.08.2015 в 10:49
3

Другой возможный вариант:

var s: String = ""
var c: Character = "c"
s += "\(c)"
    
ответ дан hennes 16.08.2015 в 10:40
источник
3

append append(c: Character) Правильный метод, но ваш код имеет две другие проблемы.

Во-первых, чтобы перебрать символы строки, вы должны получить доступ к свойству String.characters .

Во-вторых, метод append не возвращает ничего, поэтому вы должны удалить newStr.

Затем код выглядит следующим образом:

for aCharacter : Character in aString.characters {
    var str:String = ""
    str.append(aCharacter)
    // ... do other stuff
}
    
ответ дан Mike Vosseller 16.08.2015 в 01:59
источник
  • Наверняка это ничего не делает - область действия str ограничивается циклом for ... –  Grimxn 16.08.2015 в 11:03
  • right, просто создавая петлю, подобную OP. Добавлен комментарий к другим материалам –  Mike Vosseller 16.08.2015 в 18:27
1
var stringName: String = "samontro"
var characterNameLast: Character = "n"
stringName += String(characterNameLast) // You get your name "samontron"
    
ответ дан user3182143 16.08.2015 в 10:45
источник
0

В соответствии с документацией Swift 4 , Вы можете добавить значение символа в переменную String с помощью метода append () типа String:

var welcome = "hello there"

let exclamationMark: Character = "!"
welcome.append(exclamationMark)
// welcome now equals "hello there!"
    
ответ дан Shailendra Suriyal 18.01.2018 в 23:48
источник
0
 let original:String = "Hello"
 var firstCha = original[original.startIndex...original.startIndex]

 var str = "123456789"
 let x = (str as NSString).substringWithRange(NSMakeRange(0, 4))

 var appendString1 = "\(firstCha)\(x)" as String!
 // final name
 var namestr = "yogesh"
 var appendString2 = "\(namestr) (\(appendString1))" as String!*
    
ответ дан Yogesh shelke 30.09.2015 в 07:55
источник
0

Мне нужно было получить инициалы от имени и фамилии и объединить их. Используя бит и куски приведенных выше ответов, это сработало для меня:

  var initial: String = ""

            if !givenName.isEmpty {
                let char = (givenName as NSString).substring(with: NSMakeRange(0, 1))
               let str = String(char)
                initial.append(str)
            }

            if !familyName.isEmpty {
                 let char = (familyName as NSString).substring(with: NSMakeRange(0, 1))
                let str = String(char)
                initial.append(str)
            }
    
ответ дан David DelMonte 08.10.2017 в 16:32
источник