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