2017-09-15 10 views
0

でどれが存在する要素としての配列:aは文字列/ int配列であるが、これは任意の配列である場合チェックすると、任意のオブジェクトとして配列を使用してスウィフト

var a : [Any] = [] 
let x : String = "This is X" 
let y : Int = 9 
let z : [Any] = ["1", "no. 2"] 

a.append(x) 
a.append(y) 
a.append(z) 

let ele1 = 9 
let ele2 = "This is test string" 

非常に簡単! ele1、ele2が存在するかどうかを確認するには?

答えて

3

Equatableに準拠していないため、[Any]にはcontains(_:)メソッドがありません。 ==を使用してAnyを比較することはできません。

ただし、[Any]には、述語を受け入れる方法があります(contains(where:))。 (Any) -> Boolを渡すことができ、配列内にクロージャがtrueを返すようなものがあれば、containsがtrueを返します。

contains(where:)を使用して、必要なものを正確に行うことができます。たとえば、ele2をチェックしたい場合は:私がやったことは、私が==を使用し、その後、最初の要素を文字列にキャストということです

a.contains(where: { ($0 as? String) == ele2 }) 

extension Array where Element == Any { 
    func contains<T: Equatable>(_ element: T) -> Bool { 
     return contains(where: { ($0 as? T) == element }) 
    } 
} 
+0

OK、行わ:

また、これを行う拡張機能を作成することができます。ありがとう –

0

は、私はあなたがこのような何かを試みることができると思う:

a.forEach({ 
    if let testInt: Int = $0 as? Int, ele1 == testInt { 
     print("found") 
    } 
}) 

そしてほかのタイプについても同様。私は自分のコンピュータから離れているので、上記をテストしていないが、うまくいくはずだと思う。

関連する問題