Làm cách nào để nối chuỗi trong Swift?


188

Làm thế nào để nối chuỗi trong Swift?

Trong Objective-Cchúng tôi thích

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

hoặc là

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

Nhưng tôi muốn làm điều này bằng ngôn ngữ Swift.


1
Trình biên dịch Swift không thể biên dịch + rất tốt. Nếu bạn có một vài + trong một câu thì nó có thể thất bại. Sử dụng ()
kelalaka

Câu trả lời:


335

Bạn có thể nối chuỗi một số cách:

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

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

Bạn cũng có thể làm:

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

Tôi chắc chắn có nhiều cách khác nữa.

Một chút mô tả

lettạo ra một hằng số. (giống như một NSString). Bạn không thể thay đổi giá trị của nó một khi bạn đã đặt nó. Bạn vẫn có thể thêm nó vào những thứ khác và tạo các biến mới mặc dù.

vartạo ra một biến. (sắp xếp như thế NSMutableString) để bạn có thể thay đổi giá trị của nó. Nhưng điều này đã được trả lời nhiều lần trên Stack Overflow, (xem sự khác biệt giữa let và var ).

Ghi chú

Trong thực tế letvarrất khác nhau từ NSStringNSMutableStringnhưng nó giúp sự tương tự.


@ Rajneesh071 Tại sao nó lại đưa ra lỗi thời gian biên dịch?
Fogmeister

lettạo ra một hằng số. (giống như một NSString). Bạn không thể thay đổi giá trị của nó một khi bạn đã đặt nó. Bạn vẫn có thể thêm nó vào những thứ khác và tạo các biến mới mặc dù. vartạo một biến. (giống như NSMutableString) để bạn có thể thay đổi giá trị của nó. Nhưng điều này đã được trả lời nhiều lần trên SO. Tìm kiếmdifference between let and var
Fogmeister

let a = "Hello" let b = "World" let first = a + "," + b Không hoạt động, đây là những gì hoạt động, hãy để đầu tiên = "(a), (b)". Bạn sẽ gặp lỗi thời gian chạy với phương thức đầu tiên
Joseph

1
@Joseph hoạt động tốt cho tôi. i.imgur.com/T15s4Sp.png Cảm ơn bạn đã bỏ phiếu xuống.
Fogmeister

@Fogmeister bạn đang sử dụng phiên bản nào của xCode? Không hoạt động trên xCode 6.3 Beta, có thể nó hoạt động trên phiên bản mới nhất
Joseph

62

Bạn có thể thêm một chuỗi theo những cách sau:

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

Tôi nghĩ rằng tôi đã đặt tên cho tất cả.


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

25
Là một lưu ý phụ, điều này được gọi là nội suy chuỗi, không nối.
dcastro

13

Điều này cũng sẽ làm việc:

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

11

\ này đang được sử dụng để nối một chuỗi vào chuỗi khác.

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

Bạn cũng có thể thử điều này: - + từ khóa.

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

Hãy thử mã này.


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

9

Rất đơn giản:

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

HOẶClet ResultString = "\(StringA)\(StringB)"
Aks

Nếu sử dụng phép nội suy, + không cần thiết, như Aks đã đề cập. Nếu bạn thích sử dụng dấu +, hãy xóa nội suy.
Raghu Teja

9

Bây giờ bạn có thể sử dụng chuỗiByAppendingString trong Swift.

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

5

Xcode không chấp nhận các chuỗi tùy chọn được thêm bằng một chuỗi bình thường. Tôi đã viết phần mở rộng này để giải quyết vấn đề đó:

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

Sau đó, bạn có thể gọi nó như:

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

Tuy nhiên bây giờ bạn cũng có thể làm một cái gì đó như thế này:

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

Phần nào? Bạn có quen thuộc với mức độ?
Esqarrouth

Có, tôi đã tự hỏi những gì đạt được bằng cách chuyển đổi '+' trong 'addString ()'. Nếu tôi nhớ chính xác thì cách này cũng sẽ đưa ra cảnh báo thay vì lỗi trình biên dịch nếu được sử dụng trên biến không biến đổi. Mặt khác, nó làm xáo trộn những gì đang diễn ra và, IMO, không có gì dễ đọc / nhanh hơn '+'. Sự thật là có thể có một lý do khiến tôi mù quáng và đó là lý do tại sao tôi đã hỏi tại sao cách này là 'được đề xuất'
3802077

Tôi đã sử dụng điều này khi xcode không chấp nhận thêm một chuỗi tùy chọn với một chuỗi bình thường. nó vẫn không làm điều đó trực tiếp nhưng bây giờ nó hoạt động khi bạn buộc mở chuỗi, vì vậy phần mở rộng này là vô dụng. Tôi sẽ xóa nó sau khi bạn đọc nó để lại cho tôi một bình luận
Esqarrouth

Cảm ơn đã giải thích :). Không chắc chắn những gì được coi là tốt hơn nhưng bằng cách thêm ngữ cảnh vào câu trả lời của bạn, nó sẽ có giá trị thậm chí khó khăn hiện tại nó có thể không còn hữu ích như trước.
3802077

4

Nó được gọi là Nội suy chuỗi. Đó là cách tạo chuỗi MỚI với CONSTANTS, VARIABLE, LITITHS và EXPRESSION. ví dụ như:

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

cũng thế

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"

nó cũng có nghĩa là các giá trị chuỗi nối.

Hy vọng điều này sẽ giúp bạn.


3

Để in chuỗi kết hợp bằng cách sử dụng

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

hoặc String3 lưu trữ đầu ra kết hợp của 2 chuỗi

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

3

Người ta cũng có thể sử dụng chuỗiByAppendingFormat trong 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

Swift 4.2

Bạn cũng có thể sử dụng tiện ích mở rộng:

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

Sử dụng:

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

Kết quả:

"The Man"
"The"
"Man"

2

Từ: Matt Neuburg Sách về cơ bản lập trình iOS 13 với Swift. :

Để kết hợp (nối) hai chuỗi, cách tiếp cận đơn giản nhất là sử dụng toán tử + :

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

Ký hiệu thuận tiện này là có thể bởi vì toán tử + bị quá tải: nó thực hiện một điều khi các toán hạng là số (cộng số) và một điều khác khi toán hạng là chuỗi (nối). Các nhà điều hành + đi kèm với một + = gán phím tắt; một cách tự nhiên, biến ở phía bên trái phải được khai báo bằng var:

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

Là một thay thế để + = , bạn có thể gọi append (_ :) phương pháp dụ:

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

Một cách khác để nối chuỗi là với phương thức nối (dấu phân cách :) . Bạn bắt đầu với một chuỗi các chuỗi được nối và đưa cho nó chuỗi được chèn giữa tất cả các chuỗi:

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

1

Bạn có thể sử dụng SwiftString ( https://github.com/amayne/SwiftString ) để làm điều này.

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

TUYÊN BỐ TỪ CHỐI: Tôi đã viết phần mở rộng này


1

Tôi mới chuyển từ Objective-C sang Swift (4) và tôi thấy rằng tôi thường sử dụng:

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

0

Trong Swift 5 apple đã giới thiệu Raw String bằng cách sử dụng các ký hiệu #.

Thí dụ:

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

ký hiệu # là cần thiết sau \. Một \ (tên) thông thường sẽ được hiểu là các ký tự trong chuỗi.


0

Swift 5

Bạn có thể đạt được nó bằng appendingAPI. Điều này trả về một chuỗi mới được tạo bằng cách nối thêm một chuỗi đã cho vào máy thu.

Chi tiết API: tại đây

Sử dụng :

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

Kết quả :

Hello
Hello Namaste
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.