1. ホーム
  2. スイフト

[解決済み】String.substringWithRangeはどのように使うのですか?(または、SwiftでRangeはどのように動作しますか?)

2022-04-02 07:27:47

質問

の部分文字列を取得する方法がまだ分かっていません。 String をSwiftで実行します。

var str = “Hello, playground”
func test(str: String) -> String {
 return str.substringWithRange( /* What goes here? */ )
}
test (str)

SwiftでRangeが作れない。プレイグラウンドのオートコンプリートはあまり役に立ちません - これが示唆するものです。

return str.substringWithRange(aRange: Range<String.Index>)

Swift標準リファレンスライブラリには、役に立つものが見当たりません。ここにも野生の推測がありました。

return str.substringWithRange(Range(0, 1))

そして、これ。

let r:Range<String.Index> = Range<String.Index>(start: 0, end: 2)
return str.substringWithRange(r)

他の回答も見てきました( Swift String の文字のインデックスを見つける ) を示唆しているようです。 String のブリッジタイプです。 NSString の場合、"old" のメソッドは動作するはずですが、どのように動作するかは明らかではありません - 例えば、これも動作しません(有効な構文ではないようです)。

let x = str.substringWithRange(NSMakeRange(0, 3))

感想は?

解決方法は?

SubstringWithRangeメソッドを使用することができます。これは、開始と終了のString.Indexを受け取ります。

var str = "Hello, playground"
str.substringWithRange(Range<String.Index>(start: str.startIndex, end: str.endIndex)) //"Hello, playground"

開始と終了のインデックスを変更するには、advancedBy(n)を使用します。

var str = "Hello, playground"
str.substringWithRange(Range<String.Index>(start: str.startIndex.advancedBy(2), end: str.endIndex.advancedBy(-1))) //"llo, playgroun"

また、NSRangeでもNSStringメソッドを使用することは可能ですが、このようにNSStringを使用することを確認する必要があります。

let myNSString = str as NSString
myNSString.substringWithRange(NSRange(location: 0, length: 3))

注意:JanX2が言及したように、この2番目の方法はユニコード文字列では安全ではありません。