5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Swift String Range で範囲ないの文字列を取得

Posted at

Swift String Range で範囲内文字列を取得

Overview

Swift で範囲内の文字列を取得、切り出しを行うのは一苦労になりました。
Objective-C だったら簡単だったがSwiftでは一苦労になり、苦戦しております。
なので簡単にやるにはどのよういやったら良いかを考えてみた。

Apple 公式のAPIの使い方

let name = "Marie Curie"
let firstSpace = name.firstIndex(of: " ") ?? name.endIndex
let firstName = name[..<firstSpace]

このような感じになっている、伝えたいことはわかるが、Stringを配列的な感じで使えるのがいい感じである、
C言語のcharと同じ感覚である、さらにそれをRangeにして範囲を取得できるようになっているのはいいが、

このコードはコンパイルできない、

(☝︎ ՞ਊ ՞)☝︎

がStringの肩を配列のような添字で取得できる、

上記の方法ではなく、下記のようにすると取得できる、。

let moji = "1234567890"
// 一番最初から、二文字目まで取得できます。
let str = moji[moji.startIndex..<moji.index(moji.startIndex, offsetBy: 2)]
        
print (str)

これで取得できる

Rangeで指定できるが、String.Indexにしないと範囲指定はできない、

ここが大変であるので、Appleさん、 RangeのInt型で指定できると尚良いと考える

これは面倒なので、Stringを拡張した関数を実装してみる

下記になる、


extension String {
    
    func substring (range: Range<Int>) -> String {
        return String(self[self.index(self.startIndex, offsetBy: range.lowerBound)..<self.index(self.startIndex, offsetBy: range.upperBound)])
    }
    
}

使い方は下記になる。

let moji = "1234567890"
print (moji.substring(range: 0..<5))
print (moji.substring(range: 1..<4))

Rangeで範囲を指定して取得することができる

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?