以下のように複数の行にまたがって文字列を分割する方法を教えてください。
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"
私はコンパイラのハングバグを回避しながら、複数行の文字列を達成するためにStringの拡張を使用しました。それはまたあなたがPythonのjoin関数のようにそれを少し使うことができるようにあなたがセパレータを指定することを可能にします
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!"
これは私が気づいたSwiftについての最初の残念なことでした。ほとんどすべてのスクリプト言語で複数行の文字列を使用できます。
C++ 11では、独自のターミネータを定義できる ことを可能にする生の文字列リテラルが追加されました
C#には、複数行の文字列に対して @リテラル があります。
普通の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"
Litsoが指摘しているように、1つの式で+
-演算子を繰り返し使用すると、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.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の新機能 を参照してください。
Swift 4では、この問題に対処するために、複数行の文字列リテラルのサポートが提供されています。メモ帳や他のテキストエディタで書くのと同じように。複数行の文字列リテラルを終了するには、改行で( "" ")を書きます。
下記の例を参照してください
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
であるprintステートメントに行を追加したい場合、これらはエスケープシーケンスまたはエスケープ文字と呼ばれます、 これはこのトピックに関するアップルのドキュメントへのリンク 。
例:
print("First line\nSecond Line\rThirdLine...")
@Connorの回答に加えて、\ nも必要です。これが改訂されたコードです。
var text:String = "This is some text \n" +
"over multiple lines"
次の例は、Xcode 6.2 Beta以降の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)
.
.
.
Enterまたは\n
にunicode equalsを使用して、それらを文字列の中に実装できます。例えば、\u{0085}
です。
これは、文字列を複数の行で区切られた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
}
}
}
}
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
お役に立てれば!
サンプル
var yourString = "first line \n second line \n third line"
場合によっては、+演算子が適切ではないと思われます。
もう1つの方法は、文字列変数を定義済みテキストと一緒に使用したい場合です。
var textFieldData:String = "John"
myTextField.text = NSString(format: "Hello User, \n %@",textFieldData) as String
myTextField.numberOfLines = 0