Як з'єднати рядки в 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];

Але я хочу це зробити на швидкоплинній мові.


1
Компілятор Swift не може компілювати + дуже добре. Якщо у вас є пара + у реченні, то воно може вийти з ладу. Use ()
— келалака

Відповіді:


335

Можна об'єднати рядки різними способами:

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

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

Ви також можете зробити:

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

Я впевнений, що способів теж є більше.

Біт опису

letстворює константу. (начебто як NSString). Ви не можете змінити його значення після встановлення. Ви все ще можете додати його до інших речей і створити нові змінні.

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

Примітка

Насправді letі varє дуже відрізняються від NSStringі , NSMutableStringале це допомагає аналогія.


@ Rajneesh071 Чому це дасть помилку часу компіляції?
— Fogmeister

letстворює константу. (на зразок типу NSString). Ви не можете змінити його значення після встановлення. Ви все ще можете додати його до інших речей і створити нові змінні. varстворити змінну. (на зразок NSMutableString), щоб ви могли змінити його значення. Але на це вже кілька разів відповідали ТАК. Шукаєdifference between let and var
— Fogmeister

нехай a = "Hello" хай b = "World" нехай перший = a + "," + b Не працює, це те, що працює, нехай перший = "(a), (b)". Ви отримаєте помилку виконання під час першого методу
— Йосип

1
@Joseph добре працює для мене. i.imgur.com/T15s4Sp.png Хочу спасибі за голос "за".
— Fogmeister

@Fogmeister, яку версію xCode ви використовуєте? Не працює на xCode 6.3 Beta, можливо, працює над останньою версією
— Жозеф

62

Ви можете додати рядок такими способами:

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

Я думаю, що я їх усіх назвав.


31
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)"
— Акс

Якщо використовується інтерполяція, + не потрібен, як згадував Акс. Якщо ви віддаєте перевагу використанню +, видаліть інтерполяцію.
— Raghu Teja

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 не прийняв додавати необов'язковий рядок у звичайний рядок. він все ще не робить цього безпосередньо, але тепер він працює, коли ви змушуєте розкручувати рядок, тому це розширення є марним атм. я
— видалю

Дякую за пояснення :). Не впевнений, що вважається кращим, але додавши контекст у свою відповідь, це буде мати значення навіть жорстко, зараз це може бути не так корисно, як раніше.
— користувач3802077

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

Швидкий 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

Від: Книга Метта Нойбурга "Основи програмування iOS 13 зі швидким". :

Для поєднання (об'єднання) двох рядків найпростішим підходом є використання оператора + :

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)

Ще один спосіб об'єднання рядків - за допомогою методу приєднання (роздільник :) . Ви починаєте з масиву рядків, які потрібно об'єднати, і передаєте йому рядок, який потрібно вставити між усіма ними:

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 яблуко вводить сирі рядки, використовуючи # символів.

Приклад:

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

символ # необхідний після \. Звичайний \ (ім'я) буде інтерпретуватися як символи в рядку.


0

Швидкий 5

Ви можете досягти цього за допомогою appendingAPI. Це повертає новий рядок, зроблений додаванням заданої рядки до приймача.

Деталі API: тут

Використання :

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

Результат :

Hello
Hello Namaste
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.