から継承するカスタム クラス (VotingOption) がNSManagedObjectあり、配列内のいくつかの投票オプションが重複しているかどうかを確認したい場合があります。コードをできるだけ一般的にしようとしています。これは CollectionType プロトコルを拡張するために私がしたことです:
extension CollectionType where Self.Generator.Element : Equatable {
var duplicates: [Self.Generator.Element]{
return = self.filter { element in
return self.filter { $0 == element }.count != 1
}
}
var hasDuplicates: Bool {
return (self.duplicates.count != 0)
}
}
これは、グローバル関数を使用していないことを除いて、魅力的に機能しています。
func ==(lhs: VotingOption, rhs: VotingOption) -> Bool {
return (lhs.location?.title.lowercaseString == rhs.location?.title.lowercaseString) && (lhs.startDate == rhs.startDate)
}
私がこのようなことをするとき:
let temp: [VotingOption] = votingOptions?.array as? [VotingOption]
if temp.hasDuplicates {
//do something
}
次のように VotingOption で isEqual を拡張すると:
class VotingOption: NSManagedObject {
override func isEqual(object: AnyObject?) -> Bool {
if let rhs = object as? VotingOption {
return (self.location?.title.lowercaseString == rhs.location?.title.lowercaseString) && (self.startDate == rhs.startDate)
} else {
return false
}
}
...
...
... rest of class
}
アプリがクラッシュし、「libc++abi.dylib: 種類 NSException のキャッチされない例外で終了しています」というエラーで AppDelegate を指しています。
CollectionType の "==" に VotingOption のグローバル関数を使用するように指示するにはどうすればよいですか?