Xcode6-β2でCoreDataのエンティティクラスを作ってみると
なぜかObjective-Cのクラス定義が作られてしまいます。
(Swiftが選べません。)
そのまま使ってしまえばいいんですが、なんとなく気になったので
これをSwiftのクラス定義に置き換える方法を調べてみました。
事前準備
- プロジェクト作成時に"Use Core Data"にチェック
- Entityを作る
今回は例として、idとnameを持つHogeEntityというエンティティを作ってみました。
Objective-Cの場合
Xcodeで何も考えないで作るとObjective-Cのクラス定義が自動生成されます。
Xcode > New File... > iOS/OSX - Core Data > NSManagedObject subclass > エンティティを選択
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@interface HogeEntity : NSManagedObject
@property (nonatomic, retain) NSNumber * id;
@property (nonatomic, retain) NSString * name;
@end
@implementation HogeEntity
@dynamic id;
@dynamic name;
@end
Swiftの場合
普通にSwiftファイルを作ります。
Xcode > New File... > iOS/OSX - Source > Cocoa Class > subclass of: NSManagedObject > 略
import Cocoa
@objc(HogeEntity)
class HogeEntity: NSManagedObject {
@NSManaged var id: NSNumber
@NSManaged var name: String
}
どうやら @NSManaged が @dynamic の代わりみたいです。
次に、エンティティとクラス名を関連づけます。
Objective-Cの場合(Xcodeで自動生成した場合)は不要です。
- projectname.xcdatamodeldを選択
- CONFIGURATIONSでEntityを選ぶ。(今回はHogeEntity)
- Classにクラス名を入力。(今回はHogeEntity)
まとめ
いろいろ手作業になってしまうので、割り切ってしまうのがいいと思います。
製品版Xcode6ではSwiftのクラス定義を自動で生成できるようになることを信じて。
参考
Generating Swift models from Core Data entities - stackoverflow