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