Swift'te dizeleri nasıl birleştirebilirim?


188

Swift'te dize nasıl birleştirilir?

Gelen Objective-Cbiz sevmiyorum

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

veya

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

Ama bunu Swift dilinde yapmak istiyorum.


1
Swift derleyici + çok iyi derleyemez. Eğer bir cümle içinde birkaç + varsa başarısız olabilir. Kullanım ()
kelalaka

Yanıtlar:


335

Dizeleri çeşitli şekillerde birleştirebilirsiniz:

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

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

Ayrıca şunları da yapabilirsiniz:

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

Eminim başka yollar da vardır.

Biraz açıklama

letbir sabit oluşturur. (bir çeşit gibi NSString). Ayarladıktan sonra değerini değiştiremezsiniz. Yine de başka şeylere ekleyebilir ve yeni değişkenler oluşturabilirsiniz.

varbir değişken oluşturur. (bir çeşit gibi NSMutableString) böylece değerini değiştirebilirsiniz. Ancak bu, Stack Overflow'da birkaç kez cevaplanmıştır ( let ve var arasındaki farka bakın ).

Not

Gerçekte letve varvardır çok farklı gelen NSStringve NSMutableStringfakat benzetme olur.


@ Rajneesh071 Neden derleme zamanı hatası veriyor?
Fogmeister

letbir sabit oluşturur. (bir çeşit NSString gibi). Ayarladıktan sonra değerini değiştiremezsiniz. Yine de başka şeylere ekleyebilir ve yeni değişkenler oluşturabilirsiniz. vardeğişken oluştur. (bir çeşit NSMutableString gibi) böylece değerini değiştirebilirsiniz. Ancak bu SO üzerinde birkaç kez cevaplanmıştır. Görünüyordifference between let and var
Fogmeister

let a = "Merhaba" let b = "Dünya" ilk önce = a + "," + b Çalışmıyor, işe yarayan bu, ilk önce = "(a), (b)" olsun. İlk yöntemle bir çalışma zamanı hatası alırsınız
Joseph

1
@Joseph benim için iyi çalışıyor. i.imgur.com/T15s4Sp.png Aşağı oy için teşekkürler.
Fogmeister

@Fogmeister xCode'un hangi sürümünü kullanıyorsunuz? XCode 6.3 Beta üzerinde çalışmıyor, belki de en son sürüm üzerinde çalışıyor
Joseph

62

Bir dizeyi şu şekillerde ekleyebilirsiniz:

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

Sanırım hepsini adlandırdım.


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

25
Bir yan not olarak buna birleştirme değil dize enterpolasyonu denir.
dcastro

13

Bu da işe yarayacak:

var string = "swift"
var resultStr = string + " is a new Programming Language"

11

\ Bu, bir dizeyi başka bir dizeye eklemek için kullanılıyor.

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

Bunu da deneyebilirsiniz: - + anahtar kelime.

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

Bu kodu deneyin.


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

9

Çok basit:

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

VEYAlet ResultString = "\(StringA)\(StringB)"
Aks

İnterpolasyon kullanılıyorsa, Aks'ın belirttiği gibi + gerekli değildir. + İşaretini kullanmayı tercih ederseniz enterpolasyonu kaldırın.
Raghu Teja

9

Artık Swift'te stringByAppendingString öğesini kullanabilirsiniz .

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

5

Xcode, normal bir dize ile eklenen isteğe bağlı dizeleri kabul etmedi. Bu sorunu çözmek için bu uzantıları yazdım:

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

Sonra şöyle diyebilirsiniz:

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

Ancak şimdi böyle bir şey de yapabilirsiniz:

var str1: String?
var str1 = "hi"
var str2 = " my name is"
str1! += str2

Hangi bölüm? Uzanımlara aşina mısınız?
Esqarrouth

Evet, 'addString ()' içinde '+' dönüştürerek ne kazanıldığını merak ediyordum. Bu şekilde doğru hatırlıyorsam, değişken olmayan değişkente kullanılırsa derleyici hatası yerine size uyarı verir. Aksi takdirde, neler olup bittiğini şaşırtmaz ve IMO, hiçbir şey '+' dan daha kolay / hızlı okunamaz. Gerçek şu ki kör olmamın bir nedeni olabilir ve bu yüzden bu yolun neden 'önerilen' olduğunu soruyordum
user3802077

Bunu xcode normal bir dize ile isteğe bağlı bir dize eklemeyi kabul etmediğinde kullandım. bunu doğrudan doğrudan yapmaz, ancak şimdi dizeyi açmaya zorladığınızda çalışır, bu nedenle bu uzantı işe yaramaz atm'dir. Bu okuduktan sonra silerim bana bir yorum bıraktı
Esqarrouth

Açıklama için teşekkürler :). Neyin daha iyi olarak değerlendirildiğinden emin değilim ama cevabınıza bağlam ekleyerek, şu anda daha da zor olmayabilir.
user3802077

4

Buna String Interpolation denir. CONSTANTS, DEĞİŞKEN, LITERALS ve EXPRESSIONS ile YENİ dize oluşturmanın bir yoludur. Örneğin:

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

Ayrıca

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"

dize değerlerini birleştirmek anlamına da gelir.

Umarım bu size yardımcı olur.


3

Birleşik dizeyi kullanarak yazdırmak için

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

veya String3, 2 dizenin birleşiminin çıktısını depolar

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

3

Swift'de stringByAppendingFormat da kullanılabilir.

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

Hızlı 4.2

Ayrıca bir uzantı da kullanabilirsiniz:

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

kullanın:

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

Sonuç:

"The Man"
"The"
"Man"

2

Gönderen: Matt Neuburg “Swift ile iOS 13 Programlama Temelleri” Kitabı. :

To (concatenate) birleştirmek iki dizeyi, en basit yaklaşım kullanmaktır + operatörünü :

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

Bu uygun gösterim mümkündür, çünkü + işleci aşırı yüklenmiştir: işlenenler sayı olduğunda (sayısal toplama) bir şey yapar ve işlenenler dize olduğunda (birleştirme) bir şey yapar. + İşleci bir ile birlikte + = atama kısayol; doğal olarak, sol taraftaki değişken var ile bildirilmiş olmalıdır:

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

Bir de alternatif için + = , aramak için Append (_ :) Örnek yöntemi:

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

Dizeleri bitiştirmek bir başka yolu ile birleştirilir (ayırıcı :) yöntem. Birleştirilecek dizelerden oluşan bir diziyle başlıyorsunuz ve bunların arasına, bunların arasına eklenecek dizeyi veriyoruz:

let s = "hello"
let s2 = "world"
let space = " "
let greeting = [s,s2].joined(separator:space)

1

Bunu yapmak için SwiftString'i ( https://github.com/amayne/SwiftString ) kullanabilirsiniz.

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

YASAL UYARI: Bu uzantıyı yazdım


1

Objective-C'den Swift'e (4) geçtim ve sık kullandığımı görüyorum:

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

0

Swift 5'te elma, # sembolleri kullanarak Ham Dizeleri tanıttı.

Misal:

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

\ işaretinden sonra # işareti gereklidir. Normal \ (ad) dizede karakterler olarak yorumlanır.


0

Hızlı 5

appendingAPI kullanarak bunu başarabilirsiniz . Bu, alıcıya belirli bir dize eklenerek oluşturulan yeni bir dize döndürür.

API Ayrıntıları: burada

Kullanım :

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

Sonuç :

Hello
Hello Namaste
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.