ฉันจะต่อสตริงใน Swift ได้อย่างไร


188

วิธีเชื่อมสตริงใน Swift ได้อย่างไร

ในแบบที่Objective-Cเราชอบ

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

หรือ

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

แต่ฉันต้องการทำสิ่งนี้ในภาษาสวิฟต์


1
คอมไพเลอร์ Swift ไม่สามารถคอมไพล์ + ได้เป็นอย่างดี หากคุณมีสอง + ในประโยคก็อาจล้มเหลว ใช้ ()
kelalaka

คำตอบ:


335

คุณสามารถต่อสตริงเข้าด้วยกันได้หลายวิธี:

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

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

คุณสามารถทำได้:

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

ฉันแน่ใจว่ามีหลายวิธีเช่นกัน

บิตของคำอธิบาย

letสร้างค่าคงที่ (เรียงลำดับของเช่นNSString) คุณไม่สามารถเปลี่ยนค่าได้เมื่อคุณตั้งค่าแล้ว คุณยังสามารถเพิ่มไปยังสิ่งอื่น ๆ และสร้างตัวแปรใหม่ได้

varสร้างตัวแปร (เรียงลำดับเหมือนNSMutableString) เพื่อให้คุณสามารถเปลี่ยนค่าของมัน แต่สิ่งนี้ได้รับการตอบกลับหลายครั้งใน Stack Overflow (ดูความแตกต่างระหว่าง let และ var )

บันทึก

ในความเป็นจริงletและvarมีความแตกต่างกันมากจากNSStringและNSMutableStringแต่มันจะช่วยให้การเปรียบเทียบ


@ Rajneesh071 ทำไมมันถึงให้เวลากับการคอมไพล์?
Fogmeister

letสร้างค่าคงที่ (เรียงลำดับเหมือน NSString) คุณไม่สามารถเปลี่ยนค่าได้เมื่อคุณตั้งค่าแล้ว คุณยังสามารถเพิ่มไปยังสิ่งอื่น ๆ และสร้างตัวแปรใหม่ได้ varสร้างตัวแปร (sort of like NSMutableString) เพื่อให้คุณสามารถเปลี่ยนค่าของมัน แต่นี่เป็นคำตอบหลายครั้งใน SO มองหาdifference between let and var
Fogmeister

ให้ a = "สวัสดี" let b = "โลก" ให้ก่อน = a + "," + b ไม่ทำงานนี่คือสิ่งที่ได้ผลให้เป็นครั้งแรก = "(a), (b)" คุณจะได้รับข้อผิดพลาดรันไทม์ด้วยวิธีแรก
โจเซฟ

1
@ โจเซฟทำงานได้ดีสำหรับฉัน i.imgur.com/T15s4Sp.pngขอบคุณสำหรับการลงคะแนนเสียง
Fogmeister

@Fogmeister คุณใช้ xCode รุ่นใดอยู่ ใช้งานไม่ได้กับ xCode 6.3 Beta อาจใช้งานได้กับรุ่นล่าสุด
Joseph

62

คุณสามารถเพิ่มสตริงด้วยวิธีเหล่านี้:

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

ฉันคิดว่าฉันตั้งชื่อพวกเขาทั้งหมด


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

25
ในฐานะที่เป็นบันทึกด้านข้างนี้เรียกว่าการแก้ไขสตริงโดยไม่ต้องต่อกัน
dcastro


11

\ นี่กำลังถูกใช้เพื่อผนวกหนึ่งสตริงไปยังอีกสตริงหนึ่ง

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

คุณสามารถลองได้เช่นกัน: - + คำสำคัญ

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

ลองรหัสนี้



9

ง่ายมาก:

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

หรือlet ResultString = "\(StringA)\(StringB)"
Aks

หากใช้การแก้ไขคุณไม่จำเป็นต้องใช้เครื่องหมาย + เช่น Aks หากคุณต้องการใช้ + ให้ลบการแก้ไข
Raghu Teja

9

ตอนนี้คุณสามารถใช้stringByAppendingStringใน Swift

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

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

ส่วนไหน? คุณคุ้นเคยกับขอบเขตหรือไม่?
Esqarrouth

ใช่ฉันสงสัยว่าได้รับอะไรบ้างจากการแปลง '+' ใน 'addString ()' หากฉันจำอย่างถูกต้องด้วยวิธีนี้ก็จะให้คำเตือนแทนข้อผิดพลาดของคอมไพเลอร์ถ้าใช้กับตัวแปรที่ไม่แน่นอน มิฉะนั้นจะทำให้สับสนสิ่งที่เกิดขึ้นและ IMO ไม่มีอะไรง่ายกว่า / เร็วกว่าการอ่าน '+' ความจริงอาจมีเหตุผลที่ฉันตาบอดและนั่นคือเหตุผลที่ฉันถามว่าทำไมวิธีนี้จึงเป็น 'แนะนำ'
user3802077

ฉันใช้สิ่งนี้เมื่อ xcode ไม่ยอมรับการเพิ่มสตริงที่เป็นทางเลือกด้วยสตริงปกติ มันยังคงไม่ทำเช่นนั้นโดยตรง แต่ตอนนี้มันทำงานได้เมื่อคุณบังคับให้แกะสตริงดังนั้นส่วนขยายนี้จึงไม่มีประโยชน์ atm ฉันจะลบมันหลังจากที่คุณอ่านนี่ทำให้ฉันมีความคิดเห็น
Esqarrouth

ขอบคุณสำหรับการสำรวจ :) ไม่แน่ใจว่าสิ่งใดที่ถือว่าดีกว่า แต่การเพิ่มบริบทให้กับคำตอบของคุณมันจะมีค่ามากยิ่งขึ้นในขณะนี้อาจไม่เป็นประโยชน์เหมือนเมื่อก่อน
user3802077

4

มันถูกเรียกว่าเป็นการแก้ไขสตริง มันเป็นวิธีในการสร้างสตริงใหม่ที่มีค่าคงที่ตัวแปรตัวอักษรและการแสดงผล ตัวอย่าง:

      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

หากต้องการพิมพ์สตริงที่รวมกันโดยใช้

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

หรือ String3 เก็บเอาต์พุตของการรวมกันของ 2 สาย

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

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

2

สวิฟท์ 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"

2

จาก: Matt Neuburg Book“ iOS 13 พื้นฐานการเขียนโปรแกรมด้วย Swift” :

ในการรวม (เชื่อมโยง)สองสตริงวิธีที่ง่ายที่สุดคือใช้ตัวดำเนินการ + :

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

สัญกรณ์ที่สะดวกนี้เป็นไปได้เนื่องจากตัวดำเนินการ +มีการโหลดมากเกินไป: มันทำอย่างหนึ่งเมื่อตัวถูกดำเนินการเป็นตัวเลข (การเพิ่มตัวเลข) และอีกอย่างเมื่อตัวถูกดำเนินการเป็นสตริง (การต่อข้อมูล) ตัวดำเนินการ +มาพร้อมกับ+ =ทางลัดการมอบหมาย โดยธรรมชาติแล้วตัวแปรทางด้านซ้ายจะต้องประกาศด้วย var:

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

ในฐานะที่เป็นทางเลือกที่จะ+ =คุณสามารถเรียกผนวก (_ :)วิธีการเช่น:

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

วิธีการเชื่อมโยงสายอีกเป็นกับเข้าร่วม (คั่น :)วิธี คุณเริ่มต้นด้วยอาเรย์ของสตริงที่จะต่อกันและส่งสตริงที่จะแทรกระหว่างพวกมันทั้งหมด:

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

1

คุณสามารถใช้ SwiftString ( https://github.com/amayne/SwiftString ) เพื่อทำสิ่งนี้

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

การปฏิเสธความรับผิด: ฉันเขียนส่วนขยายนี้


1

ฉันเพิ่งเปลี่ยนจาก Objective-C เป็น Swift (4) และฉันพบว่าฉันมักจะใช้:

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

0

ใน Swift 5 apple ได้เปิดตัว Raw Strings โดยใช้สัญลักษณ์ #

ตัวอย่าง:

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

สัญลักษณ์ # จำเป็นหลังจาก \ ปกติ \ (ชื่อ) จะถูกตีความว่าเป็นตัวละครในสตริง


0

สวิฟท์ 5

คุณสามารถทำได้โดยใช้appendingAPI ส่งคืนสตริงใหม่ที่ทำโดยต่อท้ายสตริงที่กำหนดให้กับผู้รับ

รายละเอียด API: ที่นี่

การใช้ :

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

ผลลัพธ์ :

Hello
Hello Namaste
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.