以下のように文字列を複数の行に分割するにはどうすればよいですか?
var text:String = "This is some text
over multiple lines"
以下のように文字列を複数の行に分割するにはどうすればよいですか?
var text:String = "This is some text
over multiple lines"
回答:
Swift 4では、複数行の文字列リテラルがサポートされています。改行に加えて、エスケープされていない引用符を含めることもできます。
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(", ")
これは私が気づいたSwiftの最初のがっかりしたことでした。ほとんどすべてのスクリプト言語では、複数行の文字列を使用できます。
C ++ 11 は、独自のターミネーターを定義できる生の文字列リテラルを追加しました
C#には、複数行の文字列用の@literalsがあります。
単純なC、つまり旧式のC ++とObjective-Cでも、複数のリテラルを隣接させるだけで連結できるため、引用符が省略されます。空白はそれを行うときにカウントされないため、別の行に置くことができます(ただし、独自の改行を追加する必要があります)。
const char* text = "This is some text\n"
"over multiple lines";
Swiftはテキストが複数行に渡ったことを知らないので、Cのサンプルと同様にconnorのサンプルを修正して、改行を明示的に記述しなければなりません。
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が指摘したように、+
1つの式で-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は、マルチライン文字列リテラルのサポートを提供することでこの問題に対処しました。文字列リテラルを開始するには、3つの二重引用符(”””)を追加してReturnキーを押します。メモ帳やテキストエディタで書くように。複数行の文字列リテラルを終了するには、改行して(”””)を書きます。
以下の例を参照
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
これらはエスケープシーケンスまたはエスケープ文字と呼ばれ、これはトピックに関するAppleのドキュメントへのリンクです。。
例:
print("First line\nSecond Line\rThirdLine...")
次の例は、Xcode 6.2ベータ版のSwiftバグの簡単な回避策として括弧を使用した複数行の継続を示しています。ピース:
.
.
.
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)
.
.
.
1つの方法は、ラベルテキストをattributedTextに設定し、文字列変数を更新して改行用の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?
。
行で区切られた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複数行