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

160

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

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

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

или же

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

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

Теги:
string
concat
string-concatenation

15 ответов

278
Лучший ответ

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

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

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

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

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

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

Бит описания

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

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

Примечание

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

  • 0
    Вы не думаете, что это даст ошибку времени компиляции?
  • 0
    @ Rajneesh071 Почему это даст ошибку времени компиляции?
Показать ещё 8 комментариев
55

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

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

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

29
var language = "Swift" 
var resultStr = "\(language) is new Programming Language"
  • 21
    Как примечание, это называется интерполяцией строк, а не конкатенацией.
12

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

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"

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

10
let the_string = "Swift"
let resultString = "\(the_string) is a new Programming Language"
9

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

var string = "Swift"
var resultString = string.stringByAppendingString(" is new Programming Language")
9

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

let StringA = "Hello"
let StringB = "World"
let ResultString = "\(StringA)\(StringB)"
println("Concatenated result = \(ResultString)")
  • 0
    ИЛИ let ResultString = "\(StringA)\(StringB)"
  • 0
    Если используется интерполяция, знак + не нужен, как упоминал Акс. Если вы предпочитаете использовать +, удалите интерполяцию.
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
  • 0
    Вы не против объяснить эту рекомендацию?
  • 0
    Какая часть? Вы знакомы с расширениями?
Показать ещё 4 комментария
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

Можно также использовать 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
3

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

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

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

let strin3 = "\(string1)\(string2)"
2

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

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

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

0

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"
0

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню