Jak połączyć łańcuchy w Swift?

188

Jak połączyć łańcuch w Swift?

W Objective-Clubimy

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

lub

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

Ale chcę to zrobić w języku Swift.

Rajneesh071
źródło
1
Kompilator Swift nie może dobrze skompilować +. Jeśli masz zdanie + w jednym zdaniu, może się nie powieść. Use ()
kelalaka

Odpowiedzi:

335

Możesz łączyć łańcuchy na kilka sposobów:

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

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

Możesz także:

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

Jestem pewien, że jest też więcej sposobów.

Trochę opisu

lettworzy stałą. (trochę jak NSString). Nie możesz zmienić jego wartości po jej ustawieniu. Nadal możesz go dodawać do innych rzeczy i tworzyć nowe zmienne.

vartworzy zmienną. (coś w stylu NSMutableString), abyś mógł zmienić jego wartość. Ale na to przepełniono stos kilka razy (patrz różnica między let i var ).

Uwaga

W rzeczywistości leti varbardzo różni się od NSStringa NSMutableStringjednak pomaga analogię.

Fogmeister
źródło
@ Rajneesh071 Dlaczego miałby dawać błąd czasu kompilacji?
Fogmeister
lettworzy stałą. (trochę jak NSString). Nie możesz zmienić jego wartości po jej ustawieniu. Nadal możesz go dodawać do innych rzeczy i tworzyć nowe zmienne. varutwórz zmienną. (coś w rodzaju NSMutableString), więc możesz zmienić jego wartość. Ale na to pytanie kilkakrotnie odpowiedziano na SO. Wyglądadifference between let and var
Fogmeister
niech a = „Cześć” niech b = „Świat” niech najpierw = a + ”,„ + b Nie działa, to właśnie działa, niech najpierw = ”(a), (b)”. Otrzymasz błąd czasu wykonania przy pierwszej metodzie
Joseph
1
@Joseph działa dla mnie dobrze. i.imgur.com/T15s4Sp.png Dzięki za głos w dół.
Fogmeister,
@Fogmeister jakiej wersji xCode używasz? Nie działa na xCode 6.3 Beta, może działa na najnowszej wersji
Josepha
62

Możesz dodać ciąg w następujący sposób:

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

Myślę, że nazwałam je wszystkie.

Arbitraż
źródło
31
var language = "Swift" 
var resultStr = "\(language) is a new programming language"
yoeriboven
źródło
25
Na marginesie nazywa się to interpolacją łańcuchów, a nie konkatenacją.
dcastro
13

To też zadziała:

var string = "swift"
var resultStr = string + " is a new Programming Language"
CW0007007
źródło
11

\ służy to do dołączenia jednego ciągu do drugiego.

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

Możesz spróbować również: - + słowo kluczowe.

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

Wypróbuj ten kod.

Jitendra
źródło
10
let the_string = "Swift"
let resultString = "\(the_string) is a new Programming Language"
Bagvendt
źródło
9

Bardzo prosty:

let StringA = "Hello"
let StringB = "World"
let ResultString = "\(StringA)\(StringB)"
println("Concatenated result = \(ResultString)")
Rajesh Loganathan
źródło
LUBlet ResultString = "\(StringA)\(StringB)"
Aks
Jeśli używasz interpolacji, znak + nie jest potrzebny, jak wspomniał Aks. Jeśli wolisz używać +, usuń interpolację.
Raghu Teja,
9

Możesz teraz używać stringByAppendingString w Swift.

var string = "Swift"
var resultString = string.stringByAppendingString(" is new Programming Language")
Mark Moeykens
źródło
5

Xcode nie akceptuje opcjonalnych ciągów dodawanych z normalnym ciągiem. Napisałem te rozszerzenia, aby rozwiązać ten problem:

extension String {
    mutating func addString(str: String) {
        self = self + str
    }
}

Następnie możesz nazwać to tak:

var str1: String?
var str1 = "hi"
var str2 = " my name is"
str1.addString(str2)
println(str1) //hi my name is

Możesz jednak teraz zrobić coś takiego:

var str1: String?
var str1 = "hi"
var str2 = " my name is"
str1! += str2
Esqarrouth
źródło
Która część? Czy znasz rozrzuty?
Esqarrouth,
Tak, zastanawiałem się, co zyskałem, przekształcając „+” w „addString ()”. Jeśli dobrze pamiętam, w ten sposób wyświetli się ostrzeżenie zamiast błędu kompilatora, jeśli zostanie użyte w zmiennej niemodyfikowalnej. W przeciwnym razie zaciemnia to, co się dzieje i, IMO, nic nie jest łatwiejsze / szybsze do odczytania niż „+”. Prawda jest taka, że ​​może istnieć powód, dla którego jestem ślepy i dlatego pytałem, dlaczego ten sposób jest „zalecany”
użytkownik3802077
Użyłem tego, gdy xcode nie zaakceptował dodania opcjonalnego ciągu z normalnym ciągiem. nadal nie robi tego bezpośrednio, ale teraz działa, gdy wymusza się rozpakowanie łańcucha, więc to rozszerzenie jest bezużyteczne atm. usunę go po przeczytaniu tego zostawił mi komentarz
Esqarrouth
Dzięki za wyjaśnienie :). Nie jestem pewien, co jest uważane za lepsze, ale dodanie kontekstu do twojej odpowiedzi miałoby wartość nawet trudną obecnie, może nie być tak przydatne jak wcześniej.
użytkownik3802077
4

Nazywa się to interpolacją ciągów. Jest to sposób na utworzenie NOWEGO łańcucha z KONSTANCJAMI, ZMIENNYMI, LITERALAMI i EKSPRESJAMI. dla przykładów:

      let price = 3
      let staringValue = "The price of \(price) mangoes is equal to \(price*price) "

również

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"

oznacza to także łączenie wartości ciągów.

Mam nadzieję, że to ci pomoże.

Anil Gupta
źródło
3

Aby wydrukować połączony ciąg za pomocą

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

lub String3 przechowuje dane wyjściowe kombinacji 2 ciągów

let strin3 = "\(string1)\(string2)"
Pvni
źródło
3

W Swift można również użyć stringByAppendingFormat.

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
Pushpa Y
źródło
2

Szybki 4.2

Możesz także użyć rozszerzenia:

extension Array where Element == String? {
    func compactConcate(separator: String) -> String {
        return self.compactMap { $0 }.filter { !$0.isEmpty }.joined(separator: separator)
    }
}

Posługiwać się:

label.text = [m.firstName, m.lastName].compactConcate(separator: " ")

Wynik:

"The Man"
"The"
"Man"
Nik Kov
źródło
2

Od: Matt Neuburg Book „Podstawy programowania iOS 13 w Swift”. :

Aby połączyć (połączyć) dwa ciągi, najprostszym podejściem jest użycie operatora + :

let s = "hello"
let s2 = " world"
let greeting = s + s2

Ta wygodna notacja jest możliwa, ponieważ operator + jest przeciążony: robi jedną rzecz, gdy operandy są liczbami (dodawanie liczbowe), a drugą, gdy operandy są ciągami (konkatenacja). Operatora + chodzi o + = przypisania skrótów; oczywiście zmienna po lewej stronie musi zostać zadeklarowana za pomocą var:

var s = "hello"
let s2 = " world"
s += s2

Jako alternatywę do + = , można wywołać append (_ :) metoda instancji:

var s = "hello"
let s2 = " world"
s.append(s2)

Innym sposobem łączenia łańcuchów jest metoda join (separator :) . Zaczynasz od szeregu ciągów, które mają być konkatenowane, i podajesz ciąg, który ma zostać wstawiony między nimi:

let s = "hello"
let s2 = "world"
let space = " "
let greeting = [s,s2].joined(separator:space)
HS Progr
źródło
1

Aby to zrobić, możesz użyć SwiftString ( https://github.com/amayne/SwiftString ).

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

ZASTRZEŻENIE: Napisałem to rozszerzenie

eurobrew
źródło
1

Właśnie zmieniłem Objective-C na Swift (4) i stwierdzam, że często używam:

let allWords = String(format:"%@ %@ %@",message.body!, message.subject!, message.senderName!)
Sjakelien
źródło
0

W Swift 5 jabłko wprowadza Raw Strings przy użyciu # symboli.

Przykład:

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

symbol # jest konieczny po \. Zwykła \ (nazwa) będzie interpretowana jako znaki w ciągu.

Yogendra Singh
źródło
0

Szybki 5

Możesz to osiągnąć za pomocą appendingAPI. Zwraca nowy ciąg utworzony przez dodanie danego ciągu do odbiornika.

Szczegóły API: tutaj

Użyj :

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

Wynik :

Hello
Hello Namaste
Vittal Pai
źródło