Swift言語:String
概要
The Swift Programming Language (Swift 2.1): Strings and Charactersを参照して、Swiftの文字列処理について調べました。
articles of samekard: Swift 2.0でStringはどうなったか - 特殊文字などの扱いもとても参考になりました。
文字列処理
String Literals
ダブルコーテーションで囲むと文字列として取り扱われます。
let someString = "Some string literal value"
空文字で初期化
var emptyString = "" var anotherEmptyString = String()
空文字かどうかはisEmptyメソッドでチェックできます。
if emptyString.isEmpty { print("Nothing to see here") }
String Mutability
let変数にすると編集不可になります。
var variableString = "Horse" variableString += " and carriage" // variableString is now "Horse and carriage" let constantString = "Highlander" constantString += " and another Highlander" // this reports a compile-time error - a constant string cannot be modified
Strings Are Value Types
Stringオブジェクトは、Reference型ではなく、Value型です。したがって、文字列変数を別の変数に代入すると値がコピーされます。
var val1 = "aaa" var val2 = val1 val2 += "bbb" print(val1) print(val2) //aaa //aaabbb
Working with Characters
文字列の実体は、Characterです。for-inで個々のCharacterを取り出すことができます。
for character in "Dog!🐶".characters { print(character) } for c in "あいうえお".characters { print(c) } //1文字ずつ出力される //あ, い, ...,お
let exclamationMark: Character = "!" let catCharacters: [Character] = ["C", "a", "t", "!", "🐱"] let catString = String(catCharacters) print(catString)
Concatenating Strings and Characters
文字列の結合は+演算子やappendメソッドで行うことができます。
let string1 = "hello" let string2 = " there" var welcome = string1 + string2 var instruction = "look over" instruction += string2 let exclamationMark: Character = "!" welcome.append(exclamationMark)
String Interpolation
文字列の変数は、\()で値を出力することができます。
let multiplier = 3 let message = "\(multiplier) times 2.5 is \(Double(multiplier) * 2.5)"
Unicode
let wiseWords = "\"Imagination is more important than knowledge\" - Einstein" // "Imagination is more important than knowledge" - Einstein let dollarSign = "\u{24}" // $, Unicode scalar U+0024 let blackHeart = "\u{2665}" // ♥, Unicode scalar U+2665 let sparklingHeart = "\u{1F496}" // 💖, Unicode scalar U+1F496
違う文字コードの値を取得します。
if "あいうえお".canBeConvertedToEncoding(NSShiftJISStringEncoding) { "あいうえお".dataUsingEncoding(NSShiftJISStringEncoding) }
文字コードはint値で、Foundationクラスで定義されています。
$ cat swift-corelibs-foundation/CoreFoundation/String.subproj/CFStringUtilities.c // 抜粋 NSJapaneseEUCStringEncoding = 3, NSUTF8StringEncoding = 4, NSISOLatin1StringEncoding = 5, NSSymbolStringEncoding = 6, NSNonLossyASCIIStringEncoding = 7, NSShiftJISStringEncoding = 8, NSISOLatin2StringEncoding = 9, NSUnicodeStringEncoding = 10, NSWindowsCP1251StringEncoding = 11, /* Cyrillic; same as AdobeStandardCyrillic */ NSWindowsCP1252StringEncoding = 12, /* WinLatin1 */ NSWindowsCP1253StringEncoding = 13, /* Greek */ NSWindowsCP1254StringEncoding = 14, /* Turkish */ NSWindowsCP1250StringEncoding = 15, /* WinLatin2 */ NSISO2022JPStringEncoding = 21, /* ISO 2022 Japanese encoding for e-mail */ //...
その他文字列クラスのメソッド
部分文字列
print("あいうえお".substringFromIndex(2)) //うえお print("あいうえお".substringToIndex(2)) //あい
先頭を大文字にする
print("abcde".capitalizedString) // Abcde
文字列長
文字列長は、characterの数。
print("あいうえお".characters.count) // 5
文字列のバイト数。文字コードを指定します。
print("あいうえお".lengthOfBytesUsingEncoding(NSShiftJISStringEncoding)) // 10