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 varsą bardzo 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.