0
2

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.

[Swift5]スライス処理とArraySlice型

Last updated at Posted at 2019-11-14

はじめに

Swiftで便利な配列処理の一つスライス処理をした際の
少し特殊なArraySlice型についてまとめました。

前提知識(スライス)

  • 配列の一部だけ切り取りたい場合、Swiftでは以下のようにスライス処理が簡単に行えます。
let sortedArray = ["a","b","c","d","e","f"]
let slicedArray = sortedArray[2...3]
//["c", "d"]
  • エラー回避のために配列の要素が4以上の時のみ処理するようにした場合
let sortedArray = ["a","b","c","d","e","f"]
let countInt = sortedArray.count //4
//要素が4以上で処理
if countInt >= 4{
    let slicedArray = sortedArray[2...3]
}
//["c", "d"]
  • ここまでの処理では問題にならないですが、次の記述ではArraySlice型を知っていないといけません。

事前に宣言した場合(エラー)

let sortedArray = ["a","b","c","d","e","f"]
let countInt = sortedArray.count

var slicedArray = [String]() //エラー
//Cannot assign value of type 'ArraySlice<String>' to type '[String]'

if countInt >= 0{
    slicedArray = sortedArray[2...3]
}
//["c", "d"]
  • Swiftでは配列をスライスするとArraySlice型になるので型が違いますよとエラーが発生します。

ArraySlice型で宣言すべし

let sortedArray = ["a","b","c","d","e","f"]
let countInt = sortedArray.count

var slicedArray = ArraySlice<String>()

if countInt >= 0{
    slicedArray = sortedArray[2...3]
}
//["c", "d"]

ArraySlice型の特徴: Indexはオリジナルの配列が基準

sliceArrayからインデックスを取得した場合

//"c"が最初に現れるIndexを取得
let firstIndex:Int? = slicedArray.firstIndex{ $0 == "c" } ?? nil
print(slicedArray)
print(firstIndex as Any)
//["c", "d"]
//Optional(2)
  • 取得されたindex番号はsliceArray基準ではなく、
    スライスする前の元配列が基準になります。
// スライス前の配列
let sortedArray = ["a","b","c","d","e","f"]

以上、ArraySlice型についてでした。

ご指摘や補足などありましたらコメントにてお願いいたします。

0
2
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
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?