Help us understand the problem. What is going on with this article?

Any型の配列のデータ削除方法

More than 1 year has passed since last update.

フリーランスの永田です。

今年は御茶ノ水で、iOSのアプリ開発をしています。

2月は忙しく、会社の隣にマンションを借りて、週7勤務をしました。
午後にお呼びがかかり、今週も週7でした。 自宅でも日夜技術レベルの向上に努めているのでアウトプットもしています。

最近のアウトプット、最新ソースでは動画トリミングの機能を追加しています。
https://github.com/daisukenagata/SliderView
挙動はこちら
https://twitter.com/dbank0208/status/1112172462777655296?s=20

Any型の配列のデータ削除方法が世の中に一つも情報としてなかったので共有します。
自分で考えました。

Structの配列

データを持ち回す時は構造体にする場合があると思います。
配列で要素名を指定出来たらいいなと思い、今回の実装を紹介します。

構造体のデータのあり、なしで、配列をクリアーする場合に

この方法ですと処理は要素1しか知らないので、要素の中身が違う場合に困りますね。

sampleAny?.remove(at: 1)

String型などでしたら、この方法で要素を指定して、消せます。

strArray.remove(at: strArray.index(of: "A")

Arrayの場合はSwift4まではEquatableで拡張クラスの対応でいけたと思います。

対応方法

Anyからcastメソッドで、指定の構造体にキャストします。

構造体のデータが空だったらクリアーするという処理。
構造体abc1を指定してabc1のデータチェックができます。
sampleAny?.removeFirst()の部分は
sampleAny.remove(at: i)などして、該当するabc1()をクリアーできますが、
配列に2つ以上ある場合はFilter関数,contains関数などの対応が必要です。

struct abc1 { 
 var abc = Int()
}

var sampleAny: [Any]? = []
sampleAny = [abc1(), abc3(), abc3(), abc1(), abc2(), abc3()]

let abc = abc1()

// ケースで応用
for (_, b) in sampleAny!.enumerated() {
   if abc.abc.description.isEmpty {
      if cast(value: b, type: abc1.self) != nil { sampleAny?.removeFirst() }
   }
}

func cast<A>(value: Any?, type: A.Type) -> A? { return value as? A }

以上、記録に残しました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした