Как объединить строки в Swift?

188

Как объединить строку в Swift?

В Objective-Cнас нравится

NSString *string = @"Swift";
NSString *resultStr = [string stringByAppendingString:@" is a new Programming Language"];

или

NSString *resultStr=[NSString stringWithFormat:@"%@ is a new Programming Language",string];

Но я хочу сделать это на языке Swift.

Rajneesh071
источник
1
Компилятор Swift не может скомпилировать + очень хорошо. Если у вас есть пара + в предложении, это может не сработать. Использование ()
келалака

Ответы:

335

Вы можете объединить строки несколькими способами:

let a = "Hello"
let b = "World"

let first = a + ", " + b
let second = "\(a), \(b)"

Вы также можете сделать:

var c = "Hello"
c += ", World"

Я уверен, что есть и другие способы.

Немного описания

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

varсоздает переменную. (вроде как NSMutableString), чтобы вы могли изменить его значение. Но на вопрос переполнения стека ответили несколько раз (см. Разницу между let и var ).

Заметка

На самом деле letи varявляются очень отличаются от NSStringи , NSMutableStringно это помогает аналогия.

Fogmeister
источник
@ Rajneesh071 Почему бы это дать ошибку времени компиляции?
Fogmeister
letсоздает постоянную. (вроде как NSString). Вы не можете изменить его значение, как только вы его установили. Вы все еще можете добавить его к другим вещам и создать новые переменные. varсоздать переменную. (вроде как NSMutableString), так что вы можете изменить его значение. Но на SO ответили несколько раз. ИЩЕТdifference between let and var
Fogmeister
let a = "Hello" let b = "World" let first = a + "," + b Не работает, это то, что работает, let first = "(a), (b)". Вы получите ошибку во время выполнения с первым методом
Джозеф
1
@ Джозеф прекрасно работает для меня. i.imgur.com/T15s4Sp.png Спасибо за голосование против.
Fogmeister
@Fogmeister, какую версию xCode вы используете? Не работает на бета-версии xCode 6.3, возможно, она работает на последней версии
Joseph
62

Вы можете добавить строку следующими способами:

  • str += ""
  • str = str + ""
  • str = str + str2
  • str = "" + ""
  • str = "\(variable)"
  • str = str + "\(variable)"

Я думаю, что назвал их всех.

Arbitur
источник
32
var language = "Swift" 
var resultStr = "\(language) is a new programming language"
yoeriboven
источник
25
В качестве примечания, это называется интерполяцией строк, а не конкатенацией.
dcastro
13

Это тоже будет работать:

var string = "swift"
var resultStr = string + " is a new Programming Language"
CW0007007
источник
11

\ это используется для добавления одной строки в другую.

var first = "Hi" 
var combineStr = "\(first) Start develop app for swift"

Вы можете попробовать это также: - + ключевое слово.

 var first = "Hi" 
 var combineStr = "+(first) Start develop app for swift"

Попробуйте этот код.

Jitendra
источник
10
let the_string = "Swift"
let resultString = "\(the_string) is a new Programming Language"
Bagvendt
источник
9

Очень просто:

let StringA = "Hello"
let StringB = "World"
let ResultString = "\(StringA)\(StringB)"
println("Concatenated result = \(ResultString)")
Раджеш Логанатхан
источник
ИЛИlet ResultString = "\(StringA)\(StringB)"
Акс
Если используется интерполяция, знак + не нужен, как упоминал Акс. Если вы предпочитаете использовать +, удалите интерполяцию.
Рагху Теджа
9

Теперь вы можете использовать stringByAppendingString в Swift.

var string = "Swift"
var resultString = string.stringByAppendingString(" is new Programming Language")
Марк Мойкенс
источник
5

Xcode не принимает необязательные строки, добавленные с нормальной строкой. Я написал это расширение, чтобы решить эту проблему:

extension String {
    mutating func addString(str: String) {
        self = self + str
    }
}

Тогда вы можете назвать это как:

var str1: String?
var str1 = "hi"
var str2 = " my name is"
str1.addString(str2)
println(str1) //hi my name is

Однако теперь вы можете сделать что-то вроде этого:

var str1: String?
var str1 = "hi"
var str2 = " my name is"
str1! += str2
Esqarrouth
источник
Какая часть? Вы знакомы с расширениями?
Esqarrouth
Да, мне было интересно, что получается преобразованием «+» в «addString ()». Если я правильно помню, этот способ также выдаст вам предупреждение вместо ошибки компилятора, если он используется для не изменяемой переменной. В противном случае это запутывает происходящее, и, IMO, нет ничего проще / быстрее для чтения, чем «+». Правда в том, что может быть причина, по которой я слепой, и именно поэтому я спрашивал, почему этот способ «рекомендуется»
user3802077
Я использовал это, когда xcode не принимал добавление необязательной строки с нормальной строкой. он по-прежнему не делает этого напрямую, но теперь он работает, когда вы принудительно разворачиваете строку, поэтому это расширение бесполезно. Я удалю его после того, как вы прочитаете это, оставив мне комментарий
Esqarrouth
Спасибо за объяснение :). Не уверен, что считается лучшим, но, добавив контекст к вашему ответу, он будет иметь ценность, даже в настоящее время он может быть не таким полезным, как раньше.
user3802077
4

Это называется строковой интерполяцией. Это способ создания НОВОЙ строки с CONSTANTS, VARIABLE, LITERALS и EXPRESSIONS. Например:

      let price = 3
      let staringValue = "The price of \(price) mangoes is equal to \(price*price) "

также

let string1 = "anil"
let string2 = "gupta"
let fullName = string1 + string2  // fullName is equal to "anilgupta"
or 
let fullName = "\(string1)\(string2)" // fullName is equal to "anilgupta"

это также означает объединение строковых значений.

Надеюсь, это поможет вам.

Анил Гупта
источник
3

Чтобы напечатать объединенную строку, используя

Println("\(string1)\(string2)")

или String3 хранит вывод комбинации из 2 строк

let strin3 = "\(string1)\(string2)"
Pvni
источник
3

Можно также использовать stringByAppendingFormat в Swift.

var finalString : NSString = NSString(string: "Hello")
finalString = finalString.stringByAppendingFormat("%@", " World")
print(finalString) //Output:- Hello World
finalString = finalString.stringByAppendingFormat("%@", " Of People")
print(finalString) //Output:- Hello World Of People
Pushpa Y
источник
2

Swift 4.2

Вы также можете использовать расширение:

extension Array where Element == String? {
    func compactConcate(separator: String) -> String {
        return self.compactMap { $0 }.filter { !$0.isEmpty }.joined(separator: separator)
    }
}

Использование:

label.text = [m.firstName, m.lastName].compactConcate(separator: " ")

Результат:

"The Man"
"The"
"Man"
Ник Ков
источник
2

От: Matt Neuburg Book «Основы программирования на iOS 13 с помощью Swift». :

Чтобы объединить (объединить) две строки, самый простой подход - использовать оператор + :

let s = "hello"
let s2 = " world"
let greeting = s + s2

Это удобное обозначение возможно, потому что оператор + перегружен: он делает одно, когда операндами являются числа (сложение чисел), и другое, когда операндами являются строки (конкатенация). Оператор + поставляется с сочетанием клавиш + = ; естественно, переменная слева должна быть объявлена ​​с помощью var:

var s = "hello"
let s2 = " world"
s += s2

В качестве альтернативы для + = , вы можете позвонить в Append (_ :) метод экземпляра:

var s = "hello"
let s2 = " world"
s.append(s2)

Еще один способ объединения строк - с помощью метода join (разделитель :) . Вы начинаете с массива строк, которые нужно объединить, и передаете ему строку, которая должна быть вставлена ​​между всеми ними:

let s = "hello"
let s2 = "world"
let space = " "
let greeting = [s,s2].joined(separator:space)
HS Progr
источник
1

Вы можете использовать SwiftString ( https://github.com/amayne/SwiftString ) для этого.

"".join(["string1", "string2", "string3"]) // "string1string2string"
" ".join(["hello", "world"]) // "hello world"

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я написал это расширение

eurobrew
источник
1

Я только что переключился с Objective-C на Swift (4) и обнаружил, что часто использую:

let allWords = String(format:"%@ %@ %@",message.body!, message.subject!, message.senderName!)
Sjakelien
источник
0

В Swift 5 Apple вводит необработанные строки, используя символы #.

Пример:

print(#"My name is "XXX" and I'm "28"."#)
let name = "XXX"
print(#"My name is \#(name)."#)

символ # необходим после \. Обычное \ (имя) будет интерпретироваться как символы в строке.

Йогендра Сингх
источник
0

Swift 5

Вы можете достичь этого с помощью appendingAPI. Это возвращает новую строку, созданную добавлением данной строки к получателю.

Детали API: здесь

Используйте :

var text = "Hello"
text = text.appending(" Namaste")

Результат :

Hello
Hello Namaste
Витталь Пай
источник