文書   >   Swift   >   String
構造体
String
文字のコレクションである Unicode 文字列値。
宣言
概観
文字列は、"Swift" のような一連の文字であり、コレクションを形成します。Swift の文字列は、Unicode であり正確で、ロケールを区別せず、効率的になるように設計されています。String 型は Objective-C クラスの NSString とブリッジし、文字列で動作する C 関数との相互運用性を提供します。
文字列リテラルまたは文字列補間を使用して新しい文字列を作成できます。文字列リテラル は、引用符で囲まれた一連の文字です。
let greeting = "Welcome!"
文字列補間 は、含まれる式を評価し、結果を文字列形式に変換する文字列リテラルです。文字列補間は、複数の部分から文字列を作成する簡単な方法です。各式をカッコ内の文字列補間に包み込み、先頭にバックスラッシュを付けます。
let name = "Rosa" let personalizedGreeting = "Welcome, \(name)!" // personalizedGreeting == "Welcome, Rosa!" let price = 2 let number = 3 let cookiePrice = "\(number) cookies: $\(price * number)." // cookiePrice == "3 cookies: $6."
連結演算子(+) を使用して、文字列を結合します。
let longerGreeting = greeting + " We're glad you're here!"
// Prints "Welcome! We're glad you're here!"
複数行の文字列リテラルは、それぞれの行の区切り文字が3つの二重引用符 (""") で囲まれています。複数行の文字列リテラルの各行からインデントが削除され、最後の区切り文字のインデントと一致します。
let banner = """ __, ( o /) _/_ `. , , , , // / (___)(_(_/_(_ //_ (__ /) (/ """
文字列の変更と比較
文字列には常に値の意味があります。文字列のコピーを変更してもオリジナルには影響を与えません。
var otherGreeting = greeting otherGreeting += " Have a nice time!" //otherGreeting == "Welcome! Have a nice time!" print(greeting) // Prints "Welcome!"
等号演算子(==) または関係演算子(< や >= のような) を使用して文字列の等しさを比較することは、常に Unicode 正規表現を使用して実行されます。これは、文字列の異なる表現が等しいとすることを意味します。
let cafe1 = "Cafe\u{301}"
let cafe2 = "Café"
print(cafe1 == cafe2)
// Prints "true"
Unicode スカラー値 "\u{301}" は、前の文字にアクセントを含むように変更するので、"e\u{301}" は単一の Unicode スカラー値 "é" と同じ正規表現を持ちます。
基本的な文字列操作は、ロケール設定には影響を受けません。これにより、文字列の比較やその他の操作では、常に単一の安定した結果が得られ、Dictionary インスタンスのキーとして、およびその他の目的で文字列をキーとして使用できるようになります。
文字列要素へのアクセス
文字列は、人間が読める文字に近い、拡張書記素クラスタ のコレクションです。“é”、“김”、“🇮🇳” などの多くの個々の文字は、複数の Unicode スカラー値で構成できます。これらのスカラー値は、Unicode の境界アルゴリズムによって、Swift Character 型で表される拡張書記素クラスタに結合されます。文字列の各要素は、Character インスタンスによって表されます。
たとえば、長い文字列の最初の単語を検索するには、スペースを検索してから、その文字列の接頭辞からその位置までの部分文字列を作成します。
let name = "Marie Curie"
let firstSpace = name.firstIndex(of: " ") ?? name.endIndex
let firstName = name[..<firstSpace]
// firstName == "Marie"
firstName 定数は、Substring 型 (元の文字列の記憶域を共有しながら文字列の部分文字列を表す型) のインスタンスです。部分文字列は文字列と同じインタフェースを表します。
print("\(name)'s first name has \(firstName.count) letters.")
// Prints "Marie Curie's first name has 5 letters."
文字列の Unicode 表現にアクセス
異なる Unicode エンコーディングでコード化された文字列の内容にアクセスする必要がある場合は、文字列の unicodeScalars、utf16、または utf8 のいずれかのプロパティを使用します。各プロパティは、それぞれ異なる Unicode エンコーディングでコード化された一連のコード単位として文字列のビューへのアクセスを提供します。
すべての文字列で使用できるさまざまなビューを示すために、以下の例ではこの String インスタンスを使用しています。
let cafe = "Cafe\u{301} du 🌍"
print(cafe)
// Prints "Café du 🌍"
cafe 文字列は、文字列が表示されたときに見る事の出来るのは 9 文字のコレクションです。
print(cafe.count) // Prints "9" print(Array(cafe)) // Prints "["C", "a", "f", "é", " ", "d", "u", " ", "🌍"]"
Unicode スカラービュー
文字列の unicodeScalars プロパティは、Unicode のスカラー値のコレクションで、Unicode の基本単位である 21 ビットのコードです。各スカラー値は、Unicode.Scalar インスタンスで表され、UTF-32 コード単位と同等です。
print(cafe.unicodeScalars.count) // Prints "10" print(Array(cafe.unicodeScalars)) // Prints "["C", "a", "f", "e", "\u{0301}", " ", "d", "u", " ", "\u{0001F30D}"]" print(cafe.unicodeScalars.map { $0.value }) // Prints "[67, 97, 102, 101, 769, 32, 100, 117, 32, 127757]"
unicodeScalars ビューの要素は、cafe 文字列内の各 Unicode スカラ値を構成します。特に、cafe は "é" 文字の分解した形式を使用して宣言されているため、unicodeScalars には文字 "e"(101) とアクセント文字 "'"(769) の両方のスカラー値が含まれています。
UTF-16 ビュー
文字列の utf16 プロパティは、文字列の Unicode スカラ値の 16 ビットコード化形式である UTF-16 コード単位のコレクションです。各コード単位は UInt16 インスタンスとして格納されます。
print(cafe.utf16.count) // Prints "11" print(Array(cafe.utf16)) // Prints "[67, 97, 102, 101, 769, 32, 100, 117, 32, 55356, 57101]"
utf16 ビューの要素は、UTF-16 でコード化されたときの文字列のコード単位です。
これらの要素は、インデックス付き NSString API を通じてアクセスされるものと一致します。
let nscafe = cafe as NSString print(nscafe.length) // Prints "11" print(nscafe.character(at: 3)) // Prints "101"
UTF-8 ビュー
文字列の utf8 プロパティは、文字列の Unicode スカラ値の 8 ビットコード化形式である UTF-8 コード単位のコレクションです。各コードユニットは UInt8 インスタンスとして格納されます。
print(cafe.utf8.count) // Prints "14" print(Array(cafe.utf8)) // Prints "[67, 97, 102, 101, 204, 129, 32, 100, 117, 32, 240, 159, 140, 141]"
utf8 ビューの要素は、UTF-8 でコード化されたときの文字列のコード単位です。この表現は、String インスタンスが C の APIに渡されるときに使用されるものと一致します。
let cLength = strlen(cafe)
print(cLength)
// Prints "14"
文字列の長さを数える
文字列の長さを知る必要があるときは、最初に長さを何に使うかを検討しなければなりません。スクリーンに表示される文字数を測定しているのか、特定のコード化で文字列に必要な記憶領域を測定しているのですか?単一の文字列は、異なるビューによって測定された場合、長さが大きく異なります。
例えば、大文字 A のような ASCII 文字は、その 4 つのビューのそれぞれで単一の要素として表されます。A の Unicode スカラー値は 65 で、UTF-16 と UTF-8 の両方で単一のコード単位に収まるのに十分小さいです。
let capitalA = "A" print(capitalA.characters.count) // Prints "1" print(capitalA.unicodeScalars.count) // Prints "1" print(capitalA.utf16.count) // Prints "1" print(capitalA.utf8.count) // Prints "1"
一方、絵文字の旗文字は、"\u{1F1F5}" と "\u{1F1F7}" のような Unicode スカラ値の組から構築されます。これらのスカラー値はそれぞれ大きすぎるため、単一の UTF-16 または UTF-8 コード単位には収まりません。その結果、文字列 "🇵🇷" の各ビューは異なる長さを報告します。
let flag = "🇵🇷" print(flag.characters.count) // Prints "1" print(flag.unicodeScalars.count) // Prints "2" print(flag.utf16.count) // Prints "4" print(flag.utf8.count) // Prints "8"
文字列が空かどうかを確認するには、ビューの 1 つの長さを 0 と比較する代わりに、その isEmpty プロパティを使用して下さい。isEmpty とは異なり、ビューの count プロパティを計算するには文字列の要素を繰り返す必要があります。
文字列ビュー要素へのアクセス
文字列の個々の要素を検索するには、タスクに適切なビューを使用します。たとえば、長い文字列の最初の単語を検索するには、文字列で空白を検索し、文字列の接頭辞からその点までの新しい文字列を作成します。
let firstSpace = name.firstIndex(of: " ") ?? name.endIndex
let firstName = name[..<firstSpace]
print(firstName)
// Prints "Marie"
文字列とそのビューはインデックスを共有するので、同じ firstSpace インデックスを使用して name 文字列の UTF-8 ビューにアクセスできます。
print(Array(name.utf8[..<firstSpaceUTF8]))
// Prints "[77, 97, 114, 105, 101]"
あるビューへのインデックスは、別のビュー内の正確に対応する位置を持っていないかもしれないことに注意してください。たとえば、上で宣言された flag 文字列は 1 文字で構成されていますが、UTF-8 としてコード化されている場合は 8 つのコード単位で構成されています。以下のコードは、flag.utf8 ビューの 1 番目と 2 番目の位置に定数を作成します。これらのインデックスで utf8 ビューにアクセスすると、1 番目と 2 番目のコードが UTF-8 ユニットを生成します。
let firstCodeUnit = flag.startIndex let secondCodeUnit = flag.utf8.index(after: firstCodeUnit) // flag.utf8[firstCodeUnit] == 240 // flag.utf8[secondCodeUnit] == 159
ただし、flag 文字列自体の要素にアクセスするために使用された場合、secondCodeUnit インデックスは特定の文字の位置に対応しません。特定の UTF-8 コード単位にのみアクセスするのではなく、そのインデックスはインデックスのコード化されたオフセットでの文字の位置として扱われます。secondCodeUnit の場合、その文字はまだ flag 自体です。
// flag[firstCodeUnit] == "🇵🇷"
// flag[secondCodeUnit] == "🇵🇷"
ある文字列のビューのインデックスが別のビューの正確な位置と一致することを検証する必要がある場合は、インデックスの samePosition(in:) メソッドまたは init(_:within:) イニシャライザを使用します。
if let exactIndex = secondCodeUnit.samePosition(in: flag) {
print(flag[exactIndex])
} else {
print("No exact match for this position.")
}
// Prints "No exact match for this position."
パフォーマンスの最適化
Swift の文字列には値の意味がありますが、文字列はデータをバッファに保存するためにコピーオンライト戦略を使用します。このバッファは、文字列の異なるコピーで共有することができます。文字列のデータは、複数の文字列インスタンスが同じバッファを使用している場合にのみ、変異する時、遅延してコピーされます。したがって、変異操作の順序の最初は、O(n) の時間と空間を要します。
文字列の連続した記憶領域がいっぱいになると、新しいバッファを割り当てければならず、データを新しい記憶領域に移動しなければなりません。文字列のバッファーは指数関数的に成長して、多くの追加操作で平均化したときに文字列に追加した時一定の時間がかかります。
String と NSString の間をブリッジする
全ての String インスタンスは、型キャスト演算子(as) を使用して NSString にブリッジでき、Objective-C で生成された全ての String インスタンスはその記憶領域として NSString インスタンスを使用できます。NSString の全ての任意のサブクラスは String インスタンスになりえるため、String インスタンスが NSString の記憶領域によって支えられている場合の表現や効率性は保証されません。NSString は不変であるため、記憶領域がコピーによって共有されているかのようになります。変異操作のシーケンスの最初のものは、要素が O(n) の時間と空間を要する一意の連続した記憶領域にコピーされ、ここで n は文字列のコード化された表現の長さです (基となる NSString に異常なパフォーマンス特性がある場合はそれ以上です)。
この議論で使用されている Unicode 用語の詳細については、Unicode.org の用語集 を参照してください。特に、この議論では、拡張書記素クラスタ、Unicode スカラ値、および 基本等価性 (canonical equivalence)について言及しています。
トピックス
String の作成
単一の文字列リテラルから文字列を作成することに加えて、空の文字列、既存の文字のグループを含む文字列、または別の文字列の内容を繰り返す文字列を作成することもできます。
init()
空の string を作成します。
init(Character)
与えられた文字を含む文字列を作成します。
init<S>(S)
与えられたシーケンスの文字を含む新しい文字列を作成します。
init<S>(S)
シーケンスの要素を含むコレクションの新しいインスタンスを作成します。
init<S>(S)
与えられたシーケンス内の文字を含む新しい文字列を作成します。
与えられた部分文字列から新しい文字列を作成します。
init(repeating: String, count: Int)
与えられた文字列を、指定された回数だけ繰り返して新しい文字列を表す物を作成します。
init(repeating: Character, count: Int)
与えられた文字を指定された回数だけ繰り返して文字列を表す物を作成します。
文字列を調べる
var isEmpty: Bool
文字列に文字がないかどうかを示すブール値。
var count: Int
文字列内の文字数。
Unicode データから文字列を作成する
init(Unicode.Scalar)
init?(data: Data, encoding: String.Encoding)
init?(utf8String: UnsafePointer<CChar>)
UTF-8 でコード化されたバイトの与えられた C 配列からデータをコピーすることによって作成された文字列を生成します。
init?(validatingUTF8: UnsafePointer<CChar>)
与えられたポインタによって参照される、ヌルで終る UTF-8 データをコピーして検証することによって新しい文字列を作成します。
init(utf16CodeUnits: UnsafePointer<unichar>, count: Int)
与えられた Unicode 文字の配列から、与えられた数の文字を含む初期化された String オブジェクトを返します。
init(utf16CodeUnitsNoCopy: UnsafePointer<unichar>, count: Int, freeWhenDone: Bool)
与えられた UTF-16 コード単位の配列から、与えられた数の文字を含む初期化された String オブジェクトを返します。
init<C, Encoding>(decoding: C, as: Encoding.Type)
指定されたコード化で、与えられた Unicode コード単位から文字列を作成します。
フォーマットを使って文字列を作成
init(format: String, CVarArg...)
init(format: String, arguments: [CVarArg])
init(format: String, locale: Locale?, CVarArg...)
init(format: String, locale: Locale?, arguments: [CVarArg])
static func localizedStringWithFormat(String, CVarArg...) -> String
与えられたフォーマット文字列をテンプレートとして使用して返します。作成された文字列を残りの引数の値は、ユーザーのデフォルトロケールに従って置き換えられます。
数値の変換
init<T>(T, radix: Int, uppercase: Bool)
与えられた値を基数 10、またはその他の指定された基数で表す文字列を作成します。
C 文字列の変換
init?<S>(bytes: S, encoding: String.Encoding)
与えられたエンコーディングで解釈された、与えられたバイトのバッファから、与えられたバイト数を含む初期化された String オブジェクトを作成し、必要に応じてバッファを解放します。警告:このイニシャライザはメモリセーフではありません。
init(cString: UnsafePointer<CChar>)
与えられたポインタによって参照される null で終了する UTF-8 データをコピーすることによって新しい文字列を作成します。
init(cString: UnsafePointer<UInt8>)
与えられたポインタによって参照される null で終了する UTF-8 データをコピーすることによって新しい文字列を作成します。
init?(cString: UnsafePointer<CChar>, encoding: String.Encoding)
与えられた C 配列内のバイトを含む文字列を生成し、与えられたエンコーディングに従って解釈します。
init<Encoding>(decodingCString: UnsafePointer<Encoding.CodeUnit>, as: Encoding.Type)
与えられたポインタの位置にある null で終了するバイトのシーケンスから文字列を作成します。
指定されたエンコーディングを使用して、与えられたポインタによって参照された、null で終了するデータをコピーすることによって新しい文字列を作成します。
他の型を文字列に変換
与えられた LosslessStringConvertible インスタンスの説明からインスタンスを作成します。
init<Subject>(describing: Subject)
与えられた値を表す文字列を作成します。
init<Subject>( describing: Subject)
与えられた値を表す文字列を作成します。
init<Subject>(describing: Subject)
与えられた値を表す文字列を作成します。
init<Subject>(describing: Subject)
与えられた値を表す文字列を作成します。
init<Subject>(reflecting: Subject)
デバッグに適した、与えられた値の詳細表現で文字列を作成します。
ファイルまたは URL から文字列を作成
init(contentsOf: URL, encoding: String.Encoding)
init(contentsOf: URL, usedEncoding: inout String.Encoding)
init(contentsOfFile: String, encoding: String.Encoding)
init(contentsOfFile: String, usedEncoding: inout String.Encoding)
ファイルまたは URL への書き込み
与えられた文字列をこの文字列に追加します。
func write<Target>(to: inout Target)
与えられた出力ストリームに文字列を書き込みます。
文字列と文字の追加
与えられた文字列をこの文字列に追加します。
与えられた文字を文字列に追加します。
func append(contentsOf: String)
func append(contentsOf: Substring)
func append<S>(contentsOf: S)
与えられたシーケンス内の文字を文字列に追加します。
func append<S>(contentsOf: S)
シーケンスまたはコレクションの要素をこのコレクションの末尾に追加します。
指定された数の ASCII 文字を格納するのに十分なスペースを文字列の基礎となる記憶庫に予約します。
static func + (String, String) -> String
static func += (inout String, String)
static func + <Other>(Other, String) -> String
シーケンスとコレクションの要素を連結して新しいコレクションを作成します。
static func + <Other>(String, Other) -> String
コレクションとシーケンスの要素を連結して新しいコレクションを作成します。
static func + <Other>(String, Other) -> String
2 つのコレクションの要素を連結して新しいコレクションを作成します。
static func += <Other>(inout String, Other)
シーケンスの要素を範囲置換可能コレクションに追加します。
文字の挿入
func insert(Character, at: String.Index)
指定された位置に新しい文字を挿入します。
func insert<C>(contentsOf: C, at: String.Index)
シーケンスの要素をコレクションの指定された位置に挿入します。
func insert<S>(contentsOf: S, at: String.Index)
指定された位置に文字のコレクションを挿入します。
部分文字列の置換
func replaceSubrange<C>(Range<String.Index>, with: C)
指定された境界内のテキストを与えられた文字に置き換えます。
func replaceSubrange<C, R>(R, with: C)
指定された要素の部分範囲を与えられたコレクションと置き換えます。
部分文字列の削除
func remove(at: String.Index) -> Character
指定された位置にある文字を削除して返します。
func removeAll(keepingCapacity: Bool)
この文字列を空の文字列に置き換えます。
func removeAll(where: (Character) -> Bool)
与えられた述語を満たす全ての要素を削除します。
func removeFirst() -> Character
コレクションの最初の要素を削除して返します。
指定した数の要素をコレクションの先頭から削除します。
func removeLast() -> Character
コレクションの最後の要素を削除して返します。
指定した数の要素をコレクションの末尾から削除します。
func removeSubrange(Range<String.Index>)
与えられた範囲内の文字を削除します。
指定した部分範囲内の要素をコレクションから削除します。
func filter((Character) -> Bool) -> String
与えられた述語を満たす元のコレクションの要素を順番に含む、同じ型の新しいコレクションを返します。
func drop(while: (Character) -> Bool) -> Substring
predicate (述語) が true を返し、残りの要素を返すときに要素をスキップして部分シーケンスを返します。
func dropFirst(Int) -> Substring
与えられた数の初期要素を除くすべてを含む部分シーケンスを返します。
func dropLast(Int) -> Substring
指定された数の最終要素を除くすべてを含む部分シーケンスを返します。
func popLast() -> Character?
コレクションの最後の要素を削除して返します。
大文字と小文字間の変更
文字列の小文字バージョンを返します。
文字列の大文字バージョンを返します。
演算子を使用した文字列の比較
等号演算子 (==) または関係演算子 (< や >= など) を使用して文字列を比較する場合は、常に Unicode 正規表現を使用して実行されるため、文字列の異なる表現は等しいと見なされます。
static func == (String, String) -> Bool
static func == <RHS>(String, RHS) -> Bool
2 つの値が等しいかどうかを示すブール値を返します。
static func != (String, String) -> Bool
2 つの値が等しくないかどうかを示すブール値を返します。
static func != <RHS>(String, RHS) -> Bool
static func < (String, String) -> Bool
static func < <RHS>(String, RHS) -> Bool
最初の引数の値が 2 番目の引数の値より小さいかどうかを示すブール値を返します。
static func <= (String, String) -> Bool
最初の引数の値が 2 番目の引数の値以下であるかどうかを示すブール値を返します。
static func <= <RHS>(String, RHS) -> Bool
最初の引数の値が 2 番目の引数の値以下であるかどうかを示すブール値を返します。
static func > (String, String) -> Bool
最初の引数の値が 2 番目の引数の値より大きいかどうかを示すブール値を返します。
static func > <RHS>(String, RHS) -> Bool
最初の引数の値が 2 番目の引数の値より大きいかどうかを示すブール値を返します。
static func >= (String, String) -> Bool
最初の引数の値が 2 番目の引数の値以上であるかどうかを示すブール値を返します。
static func >= <RHS>(String, RHS) -> Bool
最初の引数の値が 2 番目の引数の値以上であるかどうかを示すブール値を返します。
文字の比較
func elementsEqual<OtherSequence>(OtherSequence) -> Bool
このシーケンスと別のシーケンスに同じ要素が同じ順序で含まれているかどうかを示すブール値を返します。
与えられた述語 (predicate) を等価テストとして使用して、このシーケンスと他のシーケンスが同じ順序で等価な要素を含むかどうかを示すブール値を返します。
func starts<PossiblePrefix>(with: PossiblePrefix) -> Bool
シーケンスの最初の要素が別のシーケンスの要素と同じかどうかを示すブール値を返します。
等価テストとして与えられた述語 (predicate) を使用して、シーケンスの最初の要素が別のシーケンスの要素と等しいかどうかを示すブール値を返します。
func lexicographicallyPrecedes%ltOtherSequence>(OtherSequence) -> Bool
要素を比較するために小なり演算子 (<) を使用して、シーケンスが辞書順で別のシーケンスの前にあるかどうかを示すブール値を返します。
与えられた述語 (predicate) を使用して要素を比較し、シーケンスが辞書順で別のシーケンスの前にあるかどうかを示すブール値を返します。
部分文字列の検索
func hasPrefix(String) -> Bool
文字列が指定された接頭辞で始まるかどうかを示すブール値を返します。
func hasSuffix(String) -> Bool
文字列が指定された接尾辞で終わるかどうかを示すブール値を返します。
文字の検索
func contains(Character) -> Bool
シーケンスが与えられた要素を含んでいるかどうかを示すブール値を返します。
func allSatisfy((Character) -> Bool) -> Bool
シーケンスの全ての要素が与えられた述語 (predicate) を満たすかどうかを示すブール値を返します。
func contains(where: (Character) -> Bool) -> Bool
シーケンスが、与えられた述語 (predicate) を満たす要素を含んでいるかどうかを示すブール値を返します。
func first(where: (Character) -> Bool) -> Character?
与えられた述語を満たすシーケンスの最初の要素を返します。
func firstIndex(of: Character) -> String.Index?
指定した値がコレクションに現れる最初のインデックスを返します。
func firstIndex(where: (Character) -> Bool) -> String.Index?
与えられた述語を満たすコレクションの要素内の最初のインデックスを返します。
func last(where: (Character) -> Bool) -> Character?
与えられた述語を満たすシーケンスの最後の要素を返します。
func lastIndex(of: Character) -> String.Index?
指定した値がコレクション内に現れる最後のインデックスを返します。
func lastIndex(where: (Character) -> Bool) -> String.Index?
与えられた述語に一致するコレクション内の最後の要素のインデックスを返します。
シーケンス内の最大の要素を返します。
func max(by: (Character, Character) -> Bool) -> Character?
与えられた述語を要素間の比較として使用して、シーケンス内の最大の要素を返します。
シーケンス内の最小の要素を返します。
func min(by: (Character, Character) -> Bool) -> Character?
与えられた述語を要素間の比較として使用して、シーケンス内の最小の要素を返します。
部分文字列の取得
subscript(Range<String.Index>) -> Substring
subscript<R>(R) -> Substring
範囲式で指定されたコレクションの要素の連続した部分範囲にアクセスします。
subscript((UnboundedRange_) -> ()) -> Substring
func prefix(Int) -> Substring
指定された最大長までの、コレクションの最初の要素を含む部分シーケンスを返します。
func prefix(through: String.Index) -> Substring
コレクションの先頭から指定された位置までの部分シーケンスを返します。
func prefix(upTo: String.Index) -> Substring
コレクションの先頭から指定された位置までの、それを含まない部分シーケンスを返します。
func prefix(while: (Character) -> Bool) -> Substring
predicate が false を返し、残りの要素を飛ばすまで、最初の要素を含む部分シーケンスを返します。
func suffix(Int) -> Substring
コレクションの最後の要素を含む、与えられた最大長までの部分シーケンスを返します。
func suffix(from: String.Index) -> Substring
指定された位置からコレクションの末尾までの部分シーケンスを返します。
文字列の分割
func split(separator: Character, maxSplits: Int, omittingEmptySubsequences: Bool) -> [Substring]
与えられた要素と等しい要素の周りに、コレクションの可能な限り長い部分シーケンスを順番に返します。
与えられた述語 (predicate) を満たす要素を含まない、コレクションの可能な限り長い部分シーケンスを順番に返します。
文字とバイトの取得
subscript(String.Index) -> Character
与えられた位置にある文字にアクセスします。
コレクションの最初の要素。
コレクション内の最後の要素。
func randomElement() -> Character?
コレクションのランダムな要素を返します。
func randomElement<T>(using: inout T) -> Character?
乱数のソースとして与えられたジェネレータを使用して、コレクションのランダムな要素を返します。
コード化での作業
static var availableStringEncodings: [String.Encoding]
アプリケーションの環境で文字列オブジェクトがサポートするコード化記号の配列を返します。
static var defaultCStringEncoding: String.Encoding
引数として C 文字列を受け付ける全てのメソッドに対して想定されている C 文字列コード化記号を返します。
static func localizedName(of: String.Encoding) -> String
与えられたコード化記号の名前を与える人間が読める形式の文字列を返します。
文字列ビューを操作
var unicodeScalars: String.UnicodeScalarView
Unicode のスカラー値のコレクションとして表される文字列値。
init(String.UnicodeScalarView)
与えられた Unicode スカラーのコレクションに対応する文字列を作成します。
init(Substring.UnicodeScalarView)
与えられた内容を持つ文字列を作成します。
self の UTF-16 コード化記号。
与えられた UTF-16 コード単位のシーケンスに対応する文字列を作成します。
与えられた内容を持つ文字列を作成します。
self の UTF-8 コード化記号。
与えられた UTF-8 コード単位のシーケンスに対応する文字列を作成します。
指定された内容を持つ文字列を作成します。
文字列の文字の変換
func map<T>((Character) -> T) -> [T]
与えられたクロージャをシーケンスの要素にマッピングした結果を含む配列を返します。
func compactMap<ElementOfResult>((Character) -> ElementOfResult?) -> [ElementOfResult]
このシーケンスの各要素を使用して、与えられた変換を呼び出した結果の nil 以外の結果を含む配列を返します。
func flatMap<SegmentOfResult>((Character) -> SegmentOfResult) -> [SegmentOfResult.Element]
このシーケンスの各要素を使用して、与えられた変換を呼び出した結果を連結したものを含む配列を返します。
func flatMap<ElementOfResult>((Character) -> ElementOfResult?) -> [ElementOfResult]
  廃止  
func reduce<Result>(Result, (Result, Character) -> Result) -> Result
与えられたクロージャを使用してシーケンスの要素を組み合わせた結果を返します。
func reduce<Result>(into: Result, (inout Result, Character) -> ()) -> Result
与えられたクロージャを使用してシーケンスの要素を組み合わせた結果を返します。
var lazy: LazySequence<String>
このシーケンスと同じ要素を含むが、map や filter などの一部の操作が遅延的に実装されているシーケンス。
文字列の文字の反復
func forEach((Character) -> Void)
for-in ループと同じ順序で、シーケンス内の各要素に対して与えられたクロージャを呼び出します。
func enumerated() -> EnumeratedSequence<String>
(n、x) のペアのシーケンスを返します。ここで、n はゼロから始まる連続した整数を表し、x はシーケンスの要素を表します。
func makeIterator() -> String.Iterator
コレクション内の要素数以下の値。
文字列の文字の並べ替え
func sorted() -> [Character]
ソートされたシーケンスの要素を返します。
func sorted(by: (Character, Character) -> Bool) -> [Character]
与えられた述語 (predicate) を要素間の比較として使用してソートされた、シーケンスの要素を返します。
func reversed() -> ReversedCollection<String>
コレクションの要素を逆の順序で表示するビューを返します。
func shuffled() -> [Character]
シャッフルされたシーケンスの要素を返します。
func shuffled<T>(using: inout T) -> [Character]
乱数の発生ソースとして与えられた発生器を使用してシャッフルされた、シーケンスの要素を返します。
C 文字列の取得
var utf8CString: ContiguousArray<CChar>
文字列の、連続して格納された NULL で終わる UTF-8 表現。
func withCString<Result>((UnsafePointer<Int8>) -> Result) -> Result
与えられたクロージャを、文字列の内容へのポインタで呼び出します。これは、NULL で終わる UTF-8 コード単位のシーケンスとして表されます。
文字列の内容へのポインタを使用して、与えられたクロージャを呼び出します。これは、NULL で終わるコード単位のシーケンスとして表されます。
インデックスの操作
空でない文字列内の最初の文字の位置。
文字列の "最後を過ぎた" 位置、つまり最後の有効なサブスクリプト引数より 1 つ大きい位置。
func index(after: String.Index) -> String.Index
与えられたインデックスの直後の位置を返します。
func formIndex(after: inout String.Index)
与えられたインデックスをその後継者で置き換えます。
func index(before: String.Index) -> String.Index
与えられたインデックスの直前の位置を返します。
func formIndex(before: inout String.Index)
与えられたインデックスをその前にあった物で置き換えます。
func index(String.Index, offsetBy: String.IndexDistance) -> String.Index
与えられたインデックスから指定された距離にあるインデックスを返します。
func index(String.Index, offsetBy: String.IndexDistance, limitedBy: String.Index) -> String.Index?
与えられたインデックスから指定された距離にあるインデックスを返します。ただし、その距離が与えられた制限インデックスを超えない限り。
func formIndex(inout String.Index, offsetBy: Int)
与えられたインデックスを指定された距離だけオフセットします。
func formIndex(inout String.Index, offsetBy: Int, limitedBy: String.Index) -> Bool
与えられたインデックスを指定された距離だけオフセットするか、または与えられた制限インデックスと等しくなるようにします。
func distance(from: String.Index, to: String.Index) -> String.IndexDistance
2 つのインデックス間の距離を返します。
var indices: DefaultIndices<String>
コレクションをサブスクリプトするのに有効なインデックス(昇順で)。
範囲式の作成
static func ..< (String, String) -> Range<String>
下限を含むが上限を含まない、半開放範囲を返します。
static func ... (String, String) -> ClosedRange<String>
その両方の境界を含む閉鎖範囲を返します。
static func ..< (String) -> PartialRangeUpTo<String>
上限を含まない、上限までの部分範囲を返します。
static func ... (String) -> PartialRangeThrough<String>
その上限を含む、上限までの部分範囲を返します。
static func ... (String) -> PartialRangeFrom<String>
下限から上方向に延びる部分範囲を返します。
コード化と復号化
この値を与えられたエンコーダーにコード化します。
与えられた復号器からデコードすることによって、新しいインスタンスを作成します。
文字列の記述
この文字列の値。
デバッグに適した文字列の表現。
String インスタンスを反映するミラー。
与えられたハッシャーにそれらを供給することによってこの値の本質的な要素をハッシュします。
あまり使用されない機能
func index(of: Character) -> String.Index?
指定された値がコレクション内で現れる最初のインデックスを返します。
  廃止  
init(stringInterpolation: DefaultStringInterpolation)
補間された文字列リテラルから新しいインスタンスを作成します。
与えられた文字列値に初期化されたインスタンスを作成します。
init(unicodeScalarLiteral: String)
与えられた値に初期化されたインスタンスを作成します。
init(extendedGraphemeClusterLiteral: String)
与えられた値に初期化されたインスタンスを作成します。
var customPlaygroundQuickLook: _PlaygroundQuickLook
String インスタンスのカスタムプレイグラウンドのクイックルック。
  廃止  
func withContiguousStorageIfAvailable<R>((UnsafeBufferPointer<Character>) -> R) -> R?
参照型
参照のセマンティクスまたは Foundation 固有の動作が必要な場合は、ブリッジされた参照型を使用してください。
String にブリッジする静的で、プレーンテキストの Unicode 文字列オブジェクト。参照のセマンティクスまたはその他の Foundation 固有の動作が必要な場合は、NSString を使用してください。
class NSMutableString
動的なプレーンテキストの Unicode 文字列オブジェクト。参照セマンティクスを必要とする場合には String 変数の代わりに使用して下さい。
関連した文字列型
文字列のスライス。
文字列を文字のコレクションとして表すことができる型。
文字列内の文字またはコード単位の位置。
struct String.UnicodeScalarView
Unicode スカラー値のコレクションとしての文字列の内容のビュー。
struct String.UTF16View
UTF-16 コード単位のコレクションとしての文字列の内容のビュー。
struct String.UTF8View
UTF-8 コード単位のコレクションとしての文字列の内容の表示。
型エイリアス
typealias String.CompareOptions
typealias String.EncodingConversionOptions
typealias String.EnumerationOptions
typealias String.IndexDistance
2 つの String.Index 値の間のステップ数を表す型。ここで一方の値は他方の値から到達可能です。
typealias String.UnicodeScalarIndex
文字列の unicodeScalars ビューのインデックス型。
データ値としての文字列の使用
関連
以下に準拠
CKRecordValueProtocol
CustomDebugStringConvertible
CustomStringConvertible
CVarArg
ExpressibleByStringLiteral
MLDataValueConvertible
RangeReplaceableCollection
以下も見よ
標準ライブラリ
符号付き整数値型。
倍精度の浮動小数点型。
順序付けられたランダムアクセスコレクション。
その要素がキー値のペアであるコレクション。
複雑な問題を解決し、高性能で読みやすいコードを書く。
トップへ(Swift 標準ライブラリ)
トップへ(Swift 標準ライブラリ)
トップへ(Swift 標準ライブラリ)
トップへ(Swift 標準ライブラリ)