ワテのブログ

The fundamental things apply As time goes by.

2014年10月10日金曜日

[Swift] String.rangeOfStringについて

SwiftのString.rangeOfStringについて
文字列の中から特定の文字を探しだしてその位置を取得してその次の文字にアクセスしようとしてハマりました。

NSString.rangeOfStringの戻り値NSRangeは、

struct NSRange {
    NSUInteger location;
    NSUInteger len;
};

的な構造体だったと記憶していたのでSwiftもその乗りだろうと考えて

var str = "hoge/gero"
var range = str.rangeOfString("/")
var pos = range.startIndex + 1

とかするとエラーがでてコンパイルできましぇんと言われます。

どうやらrange.startIndexが型が異なるとおっしゃられているらしい。

調べてみると、

range.startIndex

はイテレータ的な型らしい。
なのでこれを進めるには

advance(range.startIndex, 1)

的な書き方をするらしい。

ちなみにString ClassにはstartIndexというインスタンスメソッドがあってこれを使って

var pos = distance(str.startIndex, range.startIndex)

としてやれば数値として先頭からのオフセットを計算できます。

直接数値でインデクッスを表現しない理由は
Strings in Swift – Ole Begemann
これっぽいです。

以上

0 件のコメント:

コメントを投稿