【解決】Redundant conformance of ‘NSDate’ to protocol ‘Comparable’エラーが出た時の対処方法

公開日: : 最終更新日:2016/02/10 iPhoneアプリ開発

20160130-110811.jpg

アプリ開発中に「Redundant conformance of ‘NSDate’ to protocol ‘Comparable」というエラーが出てしまったのですが、無事解決できたのでその対処法について紹介したいと思います。

(※以下、どこか間違いなどがあればぜひTwitterなどでご指摘下さい!)

    

スポンサード リンク

「Redundant conformance of ‘NSDate’ to protocol ‘Comparable」の意味

まず「Redundant conformance of ‘NSDate’ to protocol ‘Comparable」というエラーの意味について調べていきます。

Redundantは「余分な」、conformanceは「順応」という意味ですから、「Comparableプロトコルに対する、NSDateの余分な順応」みたいな意味でしょう。

ちょっと実験してみます。

struct DataObject : Equatable {
    var data : String
}

func ==(lhs: DataObject, rhs: DataObject) -> Bool {
    return lhs.data == rhs.data
}

// redundant conformance of 'DataObject' to protocol 'Equatable'
extension DataObject : Equatable {
    
}

上のコードでは2箇所でDataObjectをEquatableプロトコルに適合させようとしていますが、こういった場合に出るエラーのようです。

    

自分のプロジェクトでは1箇所でしかComparableプロトコルに適合させていない

先ほどの調査結果を踏まえて自分のプロジェクトを見なおしてみたのですが、NSDateクラスをComparableプロトコルに適合させようとしているコードは1箇所しかありませんでした。

ではなぜ「Redundant conformance of ‘NSDate’ to protocol ‘Comparable」エラーが出たのでしょうか?

    

Target Membership の設定

エラーメッセージをもう一度よく見なおしてみると、

20160130-112641.jpg

テストターゲットである「DateTestSampleTests」でだけエラーが発生しています。

そこで思い出したのが「Target Membership」の設定。

20160130-113000.jpg

Swiftの場合はXcodeのターゲット単位がモジュールとなるようで、テストターゲットからも見えて欲しいDateCompare.swift(NSDateのCompareに関するコードが書かれている)はアプリターゲットとテストターゲットの両方にチェックを入れたことを思い出しました。

そこでテストターゲットのチェックを外して、

20160130-113525.jpg

テストを実行してみます。

すると「Binary operator ‘<’ cannot be applied to two ‘NSDate’ operands」というエラーが出ました。

,20160130-11380.jpg

テストターゲットから、DateCompare.swiftに書かれているCompareに関するコードが見えていないからですね。

    

アプリターゲットのimportを忘れていた!

テストコードの上の方を見ると・・・

20160130-114153.jpg

なんとアプリターゲットのimportを忘れていました!

20160130-114511.jpg

「@testable import DateTestSample」という記述を追加したら、無事テストを実行できるようになりました。

ちなみに「@testable」と書くと、そのモジュール内のinternalな要素にもアクセスできるようになります。ただしprivateな要素にはアクセス出来ないようなので注意が必要です。

    

@akio0911はこう思った。

このエラーが出たおかげで、Swiftのアクセス制御・ターゲット・モジュール・単体テストあたりの理解が深まったので、良い機会となりました(^^)

Swiftのアクセス制御などに関する説明は、以下の本が詳しかったです!

この記事が気に入ったら「いいね!」しよう

follow us in feedly

Feedlyで最新記事を購読

Twitterで更新情報をゲット!

LINEでご感想・ご要望お送りください!
(スマホでLINEを起動 > 友だち追加 > QRコード)

関連記事

I20160208-152320.jpg

【Swift】privateなタイプメソッド作るなら、privateな関数でも良いかもと思った

structとかclassの中で、ちょっとした処理を担当させるprivateなタイプ

記事を読む

I20160122-095132.jpg

Swift 2のドキュメントコメントの書き方(JavaDoc的なやつ)

コード補完時やoptionクリック時などに説明が出てくるようにする「ドキュメントコメント(J

記事を読む

I20151201-120520.jpg

【Swift 2】switch内にてguardでbreakする

Swift 2のguard内ではreturnしないと文法エラーとなりますが、実はswitch

記事を読む

I20160417-171311.jpg

Xcodeのブレークポイントで変数の中身を通知センターに表示してみる

Xcodeのブレークポイントの機能を使って、ブレークポイントを通過した時点での変数の中身を通知セ

記事を読む

20140810-193043.jpg

WordPressでObjective-Cのソースコードをキレイに整形して表示する方法

WordPressの記事内で、Objective-Cのソースコードをキレイに整形して表示する方法

記事を読む

I20150909-225806.jpg

Functional Programming in Swiftを読むために、すごいH本を読み終えた感想

「Functional Programming in Swift」という本がありまして、

記事を読む

I20160124-111228.jpg

初心者がデザインを勉強するなら、まずこの本を読むといいかも

まず僕のスペックから話をすると、 アプリのコードを書いたり、ブログを書いたりしている

記事を読む

I20150720-150147.jpg

Apple Watchアプリを作りたいならこの書籍!「詳細!Apple Watch アプリ開発 入門ノート」

     Apple Watchアプリの作り方を学ぶのにオススメな書籍、「詳細!Apple W

記事を読む

20150406-121104.jpg

【アプリ開発】選んだ色をUIColorの生成コードに変換できる「Developer Color Picker」

選んだ色をUIColorの生成コードに変換できる「Developer Color Picker」

記事を読む

I20151103-131550.jpg

iPhoneアプリ開発にオススメの本7選(初心者向け含む)2015年11月版

Xcode 7/Swift 2/iOS 9に対応した関連書籍が揃ってきたので、iPhoneア

記事を読む

I20170521-225453.jpg
東京駅八重洲口の「羊肉酒場 悟大」で網焼きジンギスカンを頂きました!

ゆうせいさんと株式会社 大庄さんからご招待頂き、悟大withサッポ

I20170514-165235.jpg
iPhoneと連携できる体重体組成計「Withings Body Cardio」を使ってます

ジムに通い始めて体脂肪率が落ち始めたのをキッカケに、iPhoneと

I20170507-155440.jpg
【派手髪】ハーレイクイン風の髪色に染めてもらいました

2016年10月20日、ハーレイクイン風の髪色に染めてもらいました

I20170504-173110.jpg
【メンズネイル】東京・新宿のネイルサロンでターコイズのホログラムネイルしてもらった

ネイルネタが1年分くらい溜まっているので、ちょっとずつ書いていこう

I20170502-010117.jpg
SNUGGのライトニングケーブルが耐久性高し。8ヶ月使ってますが断線の気配なし!

iPhoneの充電&転送ケーブルであるLightningケーブルっ

→もっと見る

PAGE TOP ↑