2016-05-20 11 views
0
var items = [Any]() 

オブジェクトのインデックスUser(この場合はクラス)を検索したいと思います。[Any]()の配列内の項目のインデックスはどのようにして見つけられますか?

items.indexOf(myUserInstance)でエラーが発生します(型の値を変換できません期待引数の型「@noescape(任意)に「ユーザー」はスロー - >ブール値)を

items.indexOf(myUserInstance as? Any)あまりにもエラーがスローされます。

私はindexOfを使用できるようになります単純な拡張はありますか?今、私は、すべての項目をループしてるタイプキャスト、およびIDプロパティが等しいかどうかをチェック...

+0

は、なぜあなたは 'VARのアイテムのようにユーザーの配列を作成していない= [ユーザー]()' –

+0

私は配列になりたいので、[任意]()。時々、 '' User'''を入れたり、時には構造体を入れたりします。 – TIMEX

+0

'' '[AnyObjects]()' ''は構造体を内部に追加できません。 – TIMEX

答えて

0

//私たちは、この

(items as! NSArray).indexOfObject(user) 
+0

これはオプションではありません。アイテムが内部にない場合は、どうすれば返さないようにすることができますか? – TIMEX

+0

はそれが –

+0

(!NSArrayのなどの項目)を使用します。 –

1

のようなインデックスをretriveすることができますすることは

ような何かを試すことができます
items.indexOf { x in 
     if let u = x as? User { 
      if(u === user){ 
       return true; 
      } 
     } 

     return false 
    } 

はこれを書いて、よりエレガントな方法かもしれませんが、私はこれまで

+0

私は正確なインスタンスを確認したいと思います。これはタイプをチェックするだけではありませんか? – TIMEX

+0

ああ私は、私はこれが仕事だと思う – Fonix

+0

あなたは私の更新方法を試すことができ、前にミスを犯したが、それはないだろう '場合(U ===ユーザー){'、それは同じオブジェクトインスタンスだことを確認しますか? –

0

どの程度items.indexOf { $0 as? User === user }得たすべてのthatsの?

これは、Userオブジェクトが配列内にある最初のインデックスか、ユーザーがコレクション内にない場合はnil.None)のいずれかを含むオプションを返します。あなたのUserクラスがNSObjectから導出手段であり、それはisEqual:メソッドをオーバーライドする場合

は、その後、あなたはまた、内容が同じであるオブジェクトを見つけるために、代わりに=====演算子を使用することができます。 ==は、ポインタを比較する代わりに===の代わりにisEqual:メソッドを呼び出します。

+0

を評価する際に – TIMEX

+0

@TIMEX申し訳ありません私はそれを捕まえていませんでしたが、私はあなたが最初の 'User'オブジェクトをコンテナに入れたいと思っています。私はあなたの質問を反映するために私の答えを更新しました。 – Cristik

関連する問題