しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

Swift再入門4 − The Swift Programming Languageを読んでみる

この記事では「The Swift Programming Language」を1から読んだ感想とか発見を書いてみようと思います。
「The Swift Programming Language」とはSwiftの公式ドキュメントでiBooksや下ページで見る事ができます。

The Swift Programming Language: About Swift

読んだ所

今回はStrings and Charactersという項目を読みました。

https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/StringsAndCharacters.html#//apple_ref/doc/uid/TP40014097-CH7-ID285

学んだこと

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.startIndexString.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)みたいな書き方もできると書いてあったのですが実際はメソッドが見つかりませんでした。