Bir dizeyi aşağıdaki gibi birden çok satıra nasıl bölebilirim?
var text:String = "This is some text
over multiple lines"
Bir dizeyi aşağıdaki gibi birden çok satıra nasıl bölebilirim?
var text:String = "This is some text
over multiple lines"
Yanıtlar:
Swift 4, çok satırlı dize değişmez değerleri için destek içerir . Yeni satırlara ek olarak çıkış karakterleri de içermeyebilirler.
var text = """
This is some text
over multiple lines
"""
Swift'in daha eski sürümleri, birden çok satırda tek bir hazır bilgi bilgisine sahip olmanıza izin vermez, ancak birden çok satır üzerine birlikte hazır bilgi ekleyebilirsiniz:
var text = "This is some text\n"
+ "over multiple lines\n"
\n
karakteri manuel olarak eklemeniz gerekiyor . Örneğin, REPL içinde: println("foo\n" + "bar")
baskılar foo
ve bar
ayrı satırlarda.
Derleyici asılı hata kaçınarak çok satırlı dizeleri elde etmek için String bir uzantı kullandım. Ayrıca, bir ayırıcı belirtmenize izin verir, böylece onu Python'un birleştirme işlevi gibi kullanabilirsiniz
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)
, şimdilines.enumerate()
joinWithSeparator
aslında aynı şeyi yapmıyor mu? ["Hello", "World!"].joinWithSeparator(", ")
Bu Swift ile ilgili fark ettiğim ilk hayal kırıklığı yaratan şeydi. Hemen hemen tüm komut dosyası dilleri çok satırlı dizelere izin verir.
C ++ 11 , kendi terminatörünüzü tanımlamanıza izin veren ham dize değişmezleri ekledi
C #, çok satırlı dizeler için @literals değerine sahiptir .
Düz C ve dolayısıyla eski moda C ++ ve Objective-C bile, birden çok değişmezi bitişik olarak koyarak birleşmeye izin verir, böylece tırnaklar daraltılır. Whitespace bunu yaptığınızda sayılmaz, böylece bunları farklı satırlara koyabilirsiniz (ancak kendi yeni satırlarınızı eklemeniz gerekir):
const char* text = "This is some text\n"
"over multiple lines";
Swift, metninizi birden çok satıra koyduğunuzu bilmediğinden, C örneğime benzer şekilde, satırsonunu açıkça belirterek, konektörün örneğini düzeltmem gerekiyor:
var text:String = "This is some text \n" +
"over multiple lines"
Swift 4.0'dan itibaren çok satırlı dizeler mümkündür, ancak bazı kurallar vardır:
"""
."""
da kendi satırında başlamalıdır.Bunun dışında gitmek için iyi! İşte bir örnek:
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!
"""
Daha fazla bilgi için Swift 4'teki yeniliklere bakın .
Litso'nun işaret ettiği gibi, +
bir ifadede -Operator'ın tekrar tekrar kullanılması XCode Beta askıya alınmasına neden olabilir (sadece XCode 6 Beta 5 ile kontrol edilir): Xcode 6 Beta derlenmiyor
Şimdilik çok satırlı dizeler için bir alternatif, bir dizi dizeyi kullanmaktır ve aşağıdakilerle reduce
birlikte +
:
var text = ["This is some text ",
"over multiple lines"].reduce("", +)
Veya tartışmasız daha basit join
:
var text = "".join(["This is some text ",
"over multiple lines"])
Swift 4, Çok satırlı dize değişmez desteği vererek bu sorunu çözdü. Dize değişmezine başlamak için üç çift tırnak işareti (”” ”) ekleyin ve dönüş tuşuna basın, dönüş tuşuna bastıktan sonra herhangi bir değişken, satır kesmesi ve çift tırnak ile dizeleri yazmaya başlayın not defterinde veya herhangi bir metin düzenleyicide yazmak gibi. Çok satırlı dizgi hazır bilgisini sonlandırmak için yeni satıra (”” ”) tekrar yazın.
Aşağıdaki Örneğe Bakın
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)
Swift:
@connor doğru cevaptır, ancak bir baskı ifadesine satırlar eklemek istiyorsanız, aradığınız şey \n
ve / veya \r
bunlara Kaçış Dizileri veya Kaçan Karakterler denirse, bu konuyla ilgili Apple belgelerine bir bağlantıdır. .
Misal:
print("First line\nSecond Line\rThirdLine...")
@Connor yanıtına eklenirken, \ n de olması gerekir. Düzeltilmiş kod:
var text:String = "This is some text \n" +
"over multiple lines"
Aşağıdaki örnek, parantezin Xcode 6.2 Beta sürümünden Swift hatası için basit bir geçici çözüm olarak kullanıldığı, ifadenin makul bir süre içinde çözülemeyecek kadar karmaşık olduğundan ve daha küçük bir parçaya bölündüğünü düşündüğünden çok satırlı bir devamını göstermektedir. adet:
.
.
.
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)
.
.
.
Örneklem
var yourString = "first line \n second line \n third line"
+ Operatörünü uygun bulamazsanız
Bir yaklaşım, etiket metnini attributedText'e ayarlamak ve dize değişkenini satır sonu HTML'sini içerecek şekilde güncellemektir<br />
) .
Örneğin:
var text:String = "This is some text<br />over multiple lines"
label.attributedText = text
Çıktı:
This is some text
over multiple lines
Bu yardımcı olur umarım!
String
değer (metin) atayamazsınız NSAttributedString?
(label.attributedText).
Bir dizeyi satırlar halinde ayrılmış n karaktere bölmek için bir kod pasajı:
//: 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
}
}
}
}
Birkaç yol denedim ama daha iyi bir çözüm buldum: Sadece bir "Metin Görünümü" öğesi kullanın. Metin otomatik olarak birden fazla satır gösterir! Burada bulundu: UITextField birden fazla satır