2017-10-02 3 views
0

私は現在、この拡張機能を使用しています:アレイcontainsObject()拡張

extension Array 
{ 
    func containsObject(_ object:Any) -> Bool 
    { 
     if let anObject:AnyObject = object as? AnyObject 
     { 
      for obj in self 
      { 
       if let anObj:AnyObject = obj as? AnyObject 
       { 
        if anObj === anObject 
        { 
         return true 
        } 
       } 
      } 
     } 
     return false 
    } 
} 

私は、これは次善である知っています。また、不要なコンパイル時の警告も生成します。

「Any」から「AnyObject」への条件付きキャストは常に成功します。

'Element'から 'AnyObject'への条件付きキャストは常に成功します。

誰かがオブジェクトの封じ込めを確認するためのより良い拡張を提案できますか?

答えて

3

つまり、条件付きキャストを使用する必要はありません。 as?as

extension Array { 
    func containsObject(_ object: Any) -> Bool { 
     for obj in self { 
      if obj as AnyObject === object as AnyObject { 
       return true 
      } 
     } 
     return false 
    } 
} 

それとも単にを許可すれば削除し、変更します。

extension Array { 
    func containsObject(_ object: Any) -> Bool { 
     return contains(where: {$0 as AnyObject === object as AnyObject}) 
    } 
} 
+0

おかげであなたを! 2番目の拡張は、私が探していたものです。 – BadmintonCat