Bagaimana saya bisa membagi string ke beberapa baris seperti di bawah ini?
var text:String = "This is some text
over multiple lines"
Bagaimana saya bisa membagi string ke beberapa baris seperti di bawah ini?
var text:String = "This is some text
over multiple lines"
Jawaban:
Swift 4 termasuk dukungan untuk string multi-line literal . Selain baris baru, mereka juga dapat berisi kutipan yang tidak terhindar.
var text = """
This is some text
over multiple lines
"""
Versi Swift yang lebih lama tidak memungkinkan Anda untuk memiliki satu literal lebih dari beberapa baris tetapi Anda dapat menambahkan literal bersama-sama melalui beberapa baris:
var text = "This is some text\n"
+ "over multiple lines\n"
\n
karakter secara manual . Misalnya, dalam REPL: println("foo\n" + "bar")
cetakan foo
dan bar
pada baris yang terpisah.
Saya menggunakan ekstensi pada String untuk mencapai string multiline sambil menghindari bug menggantung kompiler. Ini juga memungkinkan Anda untuk menentukan pemisah sehingga Anda dapat menggunakannya sedikit seperti fungsi gabungan 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)
sekaranglines.enumerate()
joinWithSeparator
pada dasarnya tidak melakukan hal yang sama? ["Hello", "World!"].joinWithSeparator(", ")
Ini adalah hal mengecewakan pertama tentang Swift yang saya perhatikan. Hampir semua bahasa scripting memungkinkan untuk string multi-line.
C ++ 11 menambahkan literal string mentah yang memungkinkan Anda untuk menentukan terminator Anda sendiri
C # memiliki @ literer untuk string multi-line.
Bahkan C sederhana dan C-kuno dan Objective-C kuno memungkinkan untuk concatentation hanya dengan menempatkan beberapa literal yang berdekatan, sehingga kutipan diciutkan. Spasi tidak dihitung saat Anda melakukannya sehingga Anda dapat menempatkannya di baris yang berbeda (tetapi perlu menambahkan baris baru Anda sendiri):
const char* text = "This is some text\n"
"over multiple lines";
Karena swift tidak tahu Anda telah meletakkan teks Anda di beberapa baris, saya harus memperbaiki sampel connor, mirip dengan sampel C saya, secara eksplisit menyatakan baris baru:
var text:String = "This is some text \n" +
"over multiple lines"
String multi-garis dimungkinkan pada Swift 4.0, tetapi ada beberapa aturan:
"""
,."""
juga harus dimulai dari jalurnya sendiri.Selain itu, Anda baik untuk pergi! Ini sebuah contoh:
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!
"""
Lihat apa yang baru di Swift 4 untuk informasi lebih lanjut.
Seperti yang ditunjukkan oleh litso, penggunaan berulang dari +
-Operator dalam satu ekspresi dapat menyebabkan XCode Beta hang (hanya diperiksa dengan XCode 6 Beta 5): Xcode 6 Beta tidak mengkompilasi
Alternatif untuk string multiline untuk saat ini adalah menggunakan array string dan reduce
dengan +
:
var text = ["This is some text ",
"over multiple lines"].reduce("", +)
Atau, bisa dibilang lebih sederhana, menggunakan join
:
var text = "".join(["This is some text ",
"over multiple lines"])
Swift 4 telah mengatasi masalah ini dengan memberikan dukungan multi-string string literal. Untuk memulai string literal tambahkan tiga tanda kutip ganda ("" ") dan tekan tombol kembali, Setelah menekan tombol kembali mulailah menulis string dengan variabel apa pun, jeda baris, dan tanda kutip ganda saja seperti Anda akan menulis di notepad atau editor teks apa pun. Untuk mengakhiri multi-string string literal lagi tulis ("" ") di baris baru.
Lihat Contoh Di Bawah Ini
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)
Cepat:
@connor adalah jawaban yang tepat, tetapi jika Anda ingin menambahkan baris dalam pernyataan cetak apa yang Anda cari \n
dan / atau \r
, ini disebut Escape Sequences atau Escaped Characters, ini adalah tautan ke dokumentasi Apple tentang topik tersebut. .
Contoh:
print("First line\nSecond Line\rThirdLine...")
Menambahkan ke @Connor jawaban, perlu ada \ n juga. Berikut kode yang direvisi:
var text:String = "This is some text \n" +
"over multiple lines"
Contoh berikut menggambarkan kelanjutan multi-baris, menggunakan tanda kurung sebagai solusi sederhana untuk bug Swift pada Xcode 6.2 Beta, di mana ia mengeluh ekspresi terlalu rumit untuk diselesaikan dalam jumlah waktu yang wajar, dan untuk mempertimbangkan memecahnya menjadi lebih kecil potongan:
.
.
.
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)
.
.
.
Sampel
var yourString = "first line \n second line \n third line"
Dalam hal ini, Anda tidak menemukan operator + yang cocok
Salah satu pendekatan adalah mengatur teks label ke attributedText dan memperbarui variabel string untuk menyertakan HTML untuk jeda baris (<br />
).
Sebagai contoh:
var text:String = "This is some text<br />over multiple lines"
label.attributedText = text
Keluaran:
This is some text
over multiple lines
Semoga ini membantu!
String
nilai (teks) ke NSAttributedString?
properti (label.attributedText).
Berikut ini cuplikan kode untuk membagi string dengan n karakter yang dipisahkan oleh baris:
//: 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
}
}
}
}
Saya mencoba beberapa cara tetapi menemukan solusi yang lebih baik: Cukup gunakan elemen "Tampilan Teks". Teksnya muncul beberapa baris secara otomatis! Ditemukan di sini: UITextField beberapa baris