この記事では「The Swift Programming Language」を1から読んだ感想とか発見を書いてみようと思います。
「The Swift Programming Language」とはSwiftの公式ドキュメントでiBooksや下ページで見る事ができます。
The Swift Programming Language: About Swift
読んだ所
今回はStrings and Characters
という項目を読みました。
学んだこと
1文字ずつ取り出す
下のようにすれば1文字ずつ取り出せるようです。
日本語も対応していました。
for char in "ABCあいうえお".characters { print(char) } // 文字数も日本語に対応済 "ABCあいうえお".characters.count // → 8
Character型
SwiftでもCharacter型があるようです。
下のコードを見る限りStringから暗黙的に変換してくれるようです。
let catCharacters: [Character] = ["C", "a", "t", "!", "🐱"] let catString = String(catCharacters) print(catString)
下のコードは[String] is not convertible to [Character]
というエラーになりました。
2文字以上だとCharacter
へ変換してくれないようです。
let catCharacters: [Character] = ["Cat"]
下のコードも[String] is not convertible to [Character]
エラーになりました。
明示的にStringとして宣言した場合も変換できないようです。
let catCharacters: [Character] = [String("C")]
Unicode
下のようにUnicodeのコードで指定する方法もあるようです。
print("\u{24}") // → $ print("\u{2665}") // → ♥
文字列の一部を取得
下の方法で文字列を切り取れます。
str.startIndex
はString.CharacterView.Index
というクラスを返します。
let str = "abcde" print(str[str.startIndex]) // → a
下のようにIntやRangeで指定する事はできませんでした。
String.CharacterView.Index
のみ受け付ける仕様でした。
String.CharacterView.Index(1)
のような書き方はできませんでした。
この辺はもう少し便利になってくれると嬉しいです。
print(str[0]) // エラー print(str[0...1]) // エラー
ドキュメントではstr.startIndex.advancedBy(1)
みたいな書き方もできると書いてあったのですが実際はメソッドが見つかりませんでした。