私はCHOrderedDictionary
がthis CHOrderedDictionaryであると仮定しています。その場合、Objective-Cタイプで、Swiftにブリッジしています(私が間違っていれば修正してください)。
利用可能な2つのcontains
機能がある:
extension SequenceType where Generator.Element : Equatable {
/// Returns `true` iff `element` is in `self`.
@warn_unused_result
public func contains(element: Self.Generator.Element) -> Bool
}
extension SequenceType {
/// Returns `true` iff an element in `self` satisfies `predicate`.
@warn_unused_result
public func contains(@noescape predicate: (Self.Generator.Element) throws -> Bool) rethrows -> Bool
}
CHOrderedDictionary
のキーと値は、スウィフトにAnyObject
にObjective-Cでid
から変換されるが。 AnyObject
はEquatable
に準拠していないため、最初のcontains
機能を使用することはできません。あなたは本当にしたい場合Equatable
要素の種類を可能にするために、おそらくCHOrderedDictionary
の周りにラッパーを書くことができます。
ここで最も速い解決方法は、contains
(第2のcontains
)のより一般的なバージョンを使用することです。コードでは、次のようになります。
// contains will iterate over the entire allKeys array. $0 is the key at each iteration.
let containsKey = tableDataSectionsDict!.allKeys.contains { return $0 as? String == "Yesterday" }
if !containsKey {
//...
}
'contains'関数の定義を見てください。それは、ストリングではなく、クロージャーを期待しています。 –
@AlexanderDoloz 2つの 'contains'関数があります。 1つは閉包を期待し、1つは要素を期待する。これは 'AnyObject'の辞書なので、型推論は文字列を渡すと混乱するかもしれません。 – NobodyNada
OPは 'CHOrderedDictionary'を使用します。たぶん1つの 'contains'関数しかありません:) –