ฉันจะแบ่งสตริงออกเป็นหลายบรรทัดเช่นด้านล่างได้อย่างไร
var text:String = "This is some text
over multiple lines"
ฉันจะแบ่งสตริงออกเป็นหลายบรรทัดเช่นด้านล่างได้อย่างไร
var text:String = "This is some text
over multiple lines"
คำตอบ:
สวิฟท์ 4 รวมถึงการสนับสนุนตัวอักษรของสตริงหลายคู่สาย นอกเหนือจากการขึ้นบรรทัดใหม่พวกเขายังสามารถมีคำพูดที่ไม่ใช้ค่า Escape
var text = """
This is some text
over multiple lines
"""
Swift เวอร์ชันที่เก่ากว่าไม่อนุญาตให้คุณมีตัวอักษรเดียวมากกว่าหลายบรรทัด แต่คุณสามารถเพิ่มตัวอักษรเข้าด้วยกันในหลายบรรทัด:
var text = "This is some text\n"
+ "over multiple lines\n"
\n
อักขระด้วยตนเอง ตัวอย่างเช่นใน REPL: println("foo\n" + "bar")
พิมพ์foo
และbar
แยกบรรทัด
ฉันใช้ส่วนขยายบน String เพื่อให้บรรลุหลายสายในขณะที่หลีกเลี่ยงข้อผิดพลาดของคอมไพเลอร์แขวน นอกจากนี้ยังช่วยให้คุณระบุตัวคั่นเพื่อให้คุณสามารถใช้งานได้เหมือนฟังก์ชั่นการเข้าร่วมของ 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)
ได้แล้วตอนนี้lines.enumerate()
joinWithSeparator
ทำสิ่งเดียวกันเป็นหลัก? ["Hello", "World!"].joinWithSeparator(", ")
นี่เป็นสิ่งแรกที่น่าผิดหวังเกี่ยวกับสวิฟท์ที่ฉันสังเกตเห็น เกือบทุกภาษาสคริปต์อนุญาตสำหรับสายหลายบรรทัด
C ++ 11 เพิ่มตัวอักษรสตริงดิบซึ่งอนุญาตให้คุณกำหนดเครื่องปลายทางของคุณเอง
C # มี@literalsสำหรับสตริงหลายบรรทัด
แม้แต่ C ธรรมดาและ C ++ แบบเก่าและ Objective-C ก็อนุญาตให้มีการเรียงต่อกันได้ง่ายๆโดยการใส่ตัวอักษรหลายตัวติดกัน ช่องว่างไม่นับเมื่อคุณทำเช่นนั้นเพื่อให้คุณสามารถวางไว้ในบรรทัดที่แตกต่างกัน (แต่จำเป็นต้องเพิ่มบรรทัดใหม่ของคุณเอง):
const char* text = "This is some text\n"
"over multiple lines";
เนื่องจากสวิฟท์ไม่ทราบว่าคุณใส่ข้อความของคุณในหลาย ๆ บรรทัดฉันต้องแก้ไขตัวอย่างของคอนเนอร์เช่นเดียวกับตัวอย่าง C ของฉันระบุบรรทัดใหม่อย่างชัดเจน:
var text:String = "This is some text \n" +
"over multiple lines"
สตริงที่มีหลายบรรทัดเป็นไปได้ตั้งแต่ Swift 4.0 แต่มีกฎบางอย่าง:
"""
คุณจำเป็นต้องเริ่มต้นและจบสายของคุณมีสามราคาคู่"""
ควรเริ่มจากบรรทัดของตนเองนอกจากนั้นคุณก็พร้อมที่จะไป! นี่คือตัวอย่าง:
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!
"""
ดูว่ามีอะไรใหม่ใน Swift 4สำหรับข้อมูลเพิ่มเติม
ตามที่ระบุไว้โดย litso การใช้+
-Operator ซ้ำในนิพจน์หนึ่งสามารถนำไปสู่การแขวน XCode Beta (ตรวจสอบด้วย XCode 6 Beta 5): Xcode 6 Beta ไม่ได้รวบรวม
ทางเลือกสำหรับสตริงหลายบรรทัดในตอนนี้คือการใช้อาร์เรย์ของสตริงและreduce
มันด้วย+
:
var text = ["This is some text ",
"over multiple lines"].reduce("", +)
หรือเนื้อหาที่ง่ายขึ้นโดยใช้join
:
var text = "".join(["This is some text ",
"over multiple lines"])
Swift 4 ได้แก้ไขปัญหานี้โดยให้การสนับสนุนตัวอักษรสตริงหลายบรรทัดเพื่อเริ่มต้นตัวอักษรสตริงเพิ่มเครื่องหมายคำพูดคู่ ("””) และกดปุ่มย้อนกลับสามหลังจากกดปุ่มย้อนกลับเริ่มเขียนสตริงด้วยตัวแปรใด ๆ ตัวแบ่งบรรทัดและเครื่องหมายคำพูดคู่ เหมือนที่คุณจะเขียนใน Notepad หรือโปรแกรมแก้ไขข้อความใด ๆ หากต้องการสิ้นสุดสตริงหลายบรรทัดตามตัวอักษรให้เขียน (”””) ในบรรทัดใหม่
ดูตัวอย่างด้านล่าง
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)
สวิฟท์:
@connor เป็นคำตอบที่ถูกต้อง แต่หากคุณต้องการเพิ่มบรรทัดในคำสั่งพิมพ์สิ่งที่คุณกำลังหาอยู่\n
และ / หรือ\r
สิ่งเหล่านี้เรียกว่า Escape Sequences หรือ Escaped อักขระนี่คือลิงก์ไปยังเอกสารประกอบของ Apple ในหัวข้อ .
ตัวอย่าง:
print("First line\nSecond Line\rThirdLine...")
การเพิ่มคำตอบ @Connor จำเป็นต้องมี \ n ด้วย นี่คือรหัสแก้ไข:
var text:String = "This is some text \n" +
"over multiple lines"
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงความต่อเนื่องหลายบรรทัดโดยใช้วงเล็บเป็นวิธีแก้ปัญหาง่ายๆสำหรับ Swift bug ณ Xcode 6.2 Beta ซึ่งมันบ่นว่านิพจน์นั้นซับซ้อนเกินกว่าที่จะแก้ไขในเวลาที่สมเหตุสมผลและพิจารณาแบ่งย่อยให้เล็กลง ชิ้น
.
.
.
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)
.
.
.
อีกวิธีถ้าคุณต้องการใช้ตัวแปรสตริงที่มีข้อความที่กำหนดไว้ล่วงหน้า
var textFieldData:String = "John"
myTextField.text = NSString(format: "Hello User, \n %@",textFieldData) as String
myTextField.numberOfLines = 0
คุณสามารถใช้ยูนิโค้ดเท่ากับเพื่อป้อนหรือ\n
นำไปใช้ภายในสตริงของคุณ ตัวอย่างเช่น\u{0085}
.
ตัวอย่าง
var yourString = "first line \n second line \n third line"
ในกรณีที่คุณไม่พบผู้ประกอบการ + ที่เหมาะสม
วิธีการหนึ่งคือการตั้งค่าข้อความป้ายกำกับเป็น assembedText และอัปเดตตัวแปรสตริงเพื่อรวม HTML สำหรับการขึ้นบรรทัดใหม่ ( <br />
)
ตัวอย่างเช่น:
var text:String = "This is some text<br />over multiple lines"
label.attributedText = text
เอาท์พุท:
This is some text
over multiple lines
หวังว่านี่จะช่วยได้!
String
ค่า (ข้อความ) ให้กับNSAttributedString?
คุณสมบัติ (label.attributedText)
ต่อไปนี้เป็นข้อมูลโค้ดเพื่อแยกสตริงด้วยอักขระ n ตัวคั่นระหว่างบรรทัด:
//: 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
}
}
}
}
ฉันลองหลายวิธี แต่พบวิธีแก้ปัญหาที่ดียิ่งขึ้นเพียงใช้องค์ประกอบ "มุมมองข้อความ" มันเป็นข้อความที่แสดงให้เห็นหลายบรรทัดโดยอัตโนมัติ! พบที่นี่: UITextField หลายบรรทัด