Swiftの文字列操作をどうするのか混乱する理由は、
・String.indexという文字列操作は通常indexで処理する一方で、
・String.prefix(n)とか、String.suffix(n)、string.count
という感じで、先頭や後ろからn文字という関数も存在しているため、どちらで実装すべきかが混乱するためです。
さらにここでnは数値なのですが、String.indexから簡単にnが得られないというのが問題です。
また、String.indexを使うにしても幅のある型のため、先頭のみを使う場合に混乱することになります。さらにその範囲を含むか、含まないか、という違いで実装も変わるという、非常に複雑なものになっています。
そもそも文字列操作は、Swiftのバージョンによって大きく見直しがかけれており、それも混乱する一つの要因になっています。
いろいろといじってみると、先頭から特定の文字の前までの文字列は、Swift4.2では基本以下になるようです。
let text = String(input[input.startIndex ..< input.firstIndex(of:".")!])
やはり、prefixとかは使えないので、rangeで指定します。先頭はstrtIndexで、文字列のindexはfirstIndex(of:文字列)となるようです。さらに見つからない場合はnilになるので、!でオプショナルバインディングをアンラップします(もちろんその前にnilにならないようにしておきます)。
・String.indexという文字列操作は通常indexで処理する一方で、
・String.prefix(n)とか、String.suffix(n)、string.count
という感じで、先頭や後ろからn文字という関数も存在しているため、どちらで実装すべきかが混乱するためです。
さらにここでnは数値なのですが、String.indexから簡単にnが得られないというのが問題です。
また、String.indexを使うにしても幅のある型のため、先頭のみを使う場合に混乱することになります。さらにその範囲を含むか、含まないか、という違いで実装も変わるという、非常に複雑なものになっています。
そもそも文字列操作は、Swiftのバージョンによって大きく見直しがかけれており、それも混乱する一つの要因になっています。
いろいろといじってみると、先頭から特定の文字の前までの文字列は、Swift4.2では基本以下になるようです。
let text = String(input[input.startIndex ..< input.firstIndex(of:".")!])
やはり、prefixとかは使えないので、rangeで指定します。先頭はstrtIndexで、文字列のindexはfirstIndex(of:文字列)となるようです。さらに見つからない場合はnilになるので、!でオプショナルバインディングをアンラップします(もちろんその前にnilにならないようにしておきます)。
いやぁ、たどり着くまでに結構な時間が必要でした。勘弁してほしいわ。
0 件のコメント:
コメントを投稿