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.


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ę.


@ 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.


31
var language = "Swift" 
var resultStr = "\(language) is a new programming language"

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"

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.


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

9

Bardzo prosty:

let StringA = "Hello"
let StringB = "World"
let ResultString = "\(StringA)\(StringB)"
println("Concatenated result = \(ResultString)")

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

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

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.


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

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

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"

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)


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!)

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.