Làm thế nào tôi có thể chia một chuỗi trên nhiều dòng như dưới đây?
var text:String = "This is some text
over multiple lines"
Làm thế nào tôi có thể chia một chuỗi trên nhiều dòng như dưới đây?
var text:String = "This is some text
over multiple lines"
Câu trả lời:
Swift 4 bao gồm hỗ trợ cho chuỗi ký tự nhiều dòng . Ngoài các dòng mới, họ cũng có thể chứa các trích dẫn không được giải thích.
var text = """
This is some text
over multiple lines
"""
Các phiên bản cũ hơn của Swift không cho phép bạn có một chữ duy nhất trên nhiều dòng nhưng bạn có thể thêm các chữ cùng nhau trên nhiều dòng:
var text = "This is some text\n"
+ "over multiple lines\n"
\n
nhân vật. Ví dụ: trong REPL: println("foo\n" + "bar")
in foo
và bar
trên các dòng riêng biệt.
Tôi đã sử dụng một phần mở rộng trên String để đạt được các chuỗi multiline trong khi tránh lỗi treo trình biên dịch. Nó cũng cho phép bạn chỉ định một dấu phân cách để bạn có thể sử dụng nó giống như hàm tham gia của Python
extension String {
init(sep:String, _ lines:String...){
self = ""
for (idx, item) in lines.enumerated() {
self += "\(item)"
if idx < lines.count-1 {
self += sep
}
}
}
init(_ lines:String...){
self = ""
for (idx, item) in lines.enumerated() {
self += "\(item)"
if idx < lines.count-1 {
self += "\n"
}
}
}
}
print(
String(
"Hello",
"World!"
)
)
"Hello
World!"
print(
String(sep:", ",
"Hello",
"World!"
)
)
"Hello, World!"
enumerate(lines)
giờ đâylines.enumerate()
joinWithSeparator
về cơ bản không làm điều tương tự? ["Hello", "World!"].joinWithSeparator(", ")
Đây là điều đáng thất vọng đầu tiên về Swift mà tôi nhận thấy. Hầu như tất cả các ngôn ngữ kịch bản cho phép các chuỗi nhiều dòng.
C ++ 11 đã thêm chuỗi ký tự thô cho phép bạn xác định dấu kết thúc của riêng mình
C # có @literals cho chuỗi nhiều dòng.
Ngay cả C đơn giản và do đó, C ++ và Objective-C lỗi thời cho phép kết nối đơn giản bằng cách đặt nhiều chữ bên cạnh, do đó các trích dẫn được thu gọn. Khoảng trắng không được tính khi bạn làm điều đó để bạn có thể đặt chúng trên các dòng khác nhau (nhưng cần thêm dòng mới của riêng bạn):
const char* text = "This is some text\n"
"over multiple lines";
Vì swift không biết rằng bạn đã đặt văn bản của mình trên nhiều dòng, tôi phải sửa mẫu của con trỏ, tương tự như mẫu C của tôi, nêu rõ dòng mới:
var text:String = "This is some text \n" +
"over multiple lines"
Chuỗi nhiều dòng có thể có trong Swift 4.0, nhưng có một số quy tắc:
"""
."""
cũng nên bắt đầu trên dòng riêng của nó.Ngoài ra, bạn tốt để đi! Đây là một ví dụ:
let longString = """
When you write a string that spans multiple
lines make sure you start its content on a
line all of its own, and end it with three
quotes also on a line of their own.
Multi-line strings also let you write "quote marks"
freely inside your strings, which is great!
"""
Xem những gì mới trong Swift 4 để biết thêm thông tin.
Như được chỉ ra bởi litso, việc sử dụng lặp lại +
-Operator trong một biểu thức có thể dẫn đến treo XCode Beta (chỉ được kiểm tra với XCode 6 Beta 5): Xcode 6 Beta không biên dịch
Một thay thế cho các chuỗi nhiều dòng bây giờ là sử dụng một chuỗi các chuỗi và reduce
nó với +
:
var text = ["This is some text ",
"over multiple lines"].reduce("", +)
Hoặc, đơn giản hơn, sử dụng join
:
var text = "".join(["This is some text ",
"over multiple lines"])
Swift 4 đã giải quyết vấn đề này bằng cách hỗ trợ chuỗi ký tự nhiều dòng như bạn sẽ viết trong notepad hoặc bất kỳ trình soạn thảo văn bản nào. Để kết thúc chuỗi nhiều dòng chữ một lần nữa, hãy viết lại
Xem ví dụ dưới đây
let multiLineStringLiteral = """
This is one of the best feature add in Swift 4
It let’s you write “Double Quotes” without any escaping
and new lines without need of “\n”
"""
print(multiLineStringLiteral)
Nhanh:
@connor là câu trả lời đúng, nhưng nếu bạn muốn thêm các dòng trong câu lệnh in mà bạn đang tìm kiếm \n
và / hoặc \r
, chúng được gọi là Escape Sequences hoặc Escged character , đây là liên kết đến tài liệu của Apple về chủ đề này. .
Thí dụ:
print("First line\nSecond Line\rThirdLine...")
Thêm vào câu trả lời @Connor, cũng cần phải có \ n. Đây là mã sửa đổi:
var text:String = "This is some text \n" +
"over multiple lines"
Ví dụ sau mô tả việc tiếp tục nhiều dòng, sử dụng dấu ngoặc đơn như một cách giải quyết đơn giản cho lỗi Swift kể từ Xcode 6.2 Beta, trong đó nó phàn nàn biểu thức quá phức tạp để giải quyết trong một khoảng thời gian hợp lý và xem xét chia nhỏ nó thành nhỏ hơn miếng:
.
.
.
return String(format:"\n" +
(" part1: %d\n" +
" part2: %d\n" +
" part3: \"%@\"\n" +
" part4: \"%@\"\n" +
" part5: \"%@\"\n" +
" part6: \"%@\"\n") +
(" part7: \"%@\"\n" +
" part8: \"%@\"\n" +
" part9: \"%@\"\n" +
" part10: \"%@\"\n" +
" part12: \"%@\"\n") +
" part13: %f\n" +
" part14: %f\n\n",
part1, part2, part3, part4, part5, part6, part7, part8,
part9, part10, part11, part12, part13, part14)
.
.
.
Mẫu vật
var yourString = "first line \n second line \n third line"
Trong trường hợp, bạn không tìm thấy toán tử + phù hợp
Một cách tiếp cận là đặt văn bản nhãn thành AttText và cập nhật biến chuỗi để bao gồm HTML cho ngắt dòng ( <br />
).
Ví dụ:
var text:String = "This is some text<br />over multiple lines"
label.attributedText = text
Đầu ra:
This is some text
over multiple lines
Hi vọng điêu nay co ich!
String
giá trị (văn bản) cho thuộc NSAttributedString?
tính (nhãn.attributionText).
Đây là đoạn mã để phân tách một chuỗi bởi n ký tự được phân tách trên các dòng:
//: A UIKit based Playground for presenting user interface
import UIKit
import PlaygroundSupport
class MyViewController : UIViewController {
override func loadView() {
let str = String(charsPerLine: 5, "Hello World!")
print(str) // "Hello\n Worl\nd!\n"
}
}
extension String {
init(charsPerLine:Int, _ str:String){
self = ""
var idx = 0
for char in str {
self += "\(char)"
idx = idx + 1
if idx == charsPerLine {
self += "\n"
idx = 0
}
}
}
}
Tôi đã thử một vài cách nhưng tìm thấy một giải pháp thậm chí tốt hơn: Chỉ cần sử dụng yếu tố "Chế độ xem văn bản". Đó là văn bản hiển thị nhiều dòng tự động! Tìm thấy ở đây: UITextField nhiều dòng