2016-09-26 7 views
10

Obj-CカテゴリがNSDateで、Swiftの日付構造体でそのカテゴリの関数を使用しようとしています。Swift 3でNSDateカテゴリを使用する日付型

いつでもキャストすることなく、またはDateNSDateインスタンスを作成する必要がなく、クリーンな方法がありますか、醜い他のハッキングですか?

または、Dateの代わりにNSDateとしてオブジェクトを定義する必要がありますか?

AppleはFoundationフレームワークへスウィフトオーバーレイはNSDateクラスに橋渡し日付構造を、提供here

ことを言及しています。日付値型はNSDate参照型と同じ機能を提供し、2つはObjective-C APIと相互作用するSwiftコードで交換可能に使用できます。この動作は、Swiftが標準文字列、数値、およびコレクション型を対応するFoundationクラスに橋渡しする方法と似ています。

ので、私の質問は、私はきれいな最小限のコードと私のDateオブジェクトと私のNSDateカテゴリ内の余分な機能にアクセスする方法ですか?参考

は、私は、スイフトを使用してい3

+1

'NSDate' Objective-Cカテゴリを使用するには、' Date'オブジェクトを 'NSDate'にキャストする必要があります。あるいは、あなたのカテゴリーを 'Date'のSwift' extension'として書き直すこともできます。 – Rob

答えて

5

スウィフトの3つの架橋型は、それらの対応するObjective-Cのオブジェクトへの内部参照を介して実現されます。したがって、「継承上の合成」の原則と同様に、興味のあるメソッドをSwiftで宣言して、単純に呼び出しを転送することができます。

たとえば、あなたはObjective-Cの中に次のような方法があるとします。

@interface NSDate(MyAdditions) 
- (NSString*)myCustomNicellyFormattedDate; 
@end 

をあなたは、単に転送キャストとDateの拡張追加することができます。

extension Date { 
    var myCustomNicellyFormattedDate: String { 
     return (self as NSDate).myCustomNicellyFormattedDate() 
    } 
} 

をこのアプローチには利点がありますObjective-CとSwiftの両方で利用可能なメソッドを、オーバーヘッドやメンテナンスの手間をほとんどかけずに実現できます。最も重大なことは、コードの重複がないことです。

関連する問題