String.substringWithRange はどのように使用しますか? (または、Swift で Range はどのように機能しますか?) 質問する

String.substringWithRange はどのように使用しますか? (または、Swift で Range はどのように機能しますか?) 質問する

StringSwift でa の部分文字列を取得する方法をまだ理解できていません。

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

Swift で Range を作成できません。Playground のオートコンプリートはあまり役に立ちません。次のような内容が提案されます。

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が、その方法は明確ではありません。たとえば、これも機能しません (有効な構文ではないようです)。

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

ご意見は?

ベストアンサー1

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 番目の方法は Unicode 文字列では安全ではありません。

おすすめ記事