Как объединить строки в 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.


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но это помогает аналогия.


@ 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)"

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


32
var language = "Swift" 
var resultStr = "\(language) is a new programming language"

25
В качестве примечания, это называется интерполяцией строк, а не конкатенацией.
— dcastro

13

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

var string = "swift"
var resultStr = string + " is a new Programming Language"

11

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

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

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

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

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



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

Да, мне было интересно, что получается преобразованием «+» в «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)"

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

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)

1

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

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

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


1

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

let allWords = String(format:"%@ %@ %@",message.body!, message.subject!, message.senderName!)

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.