私はObj-CからSwiftへの私のアプリケーションの一部を翻訳していました。私は理解できない、またはバイパスできない問題に直面しています。iOS - Obj-C/Swiftコード間のキャストで苦闘
モデルクラス予測
@class City;
@interface Forecast : ForecastInterface
@property (nonatomic, retain) City *city;
@end
モデルクラスForecast48h
@class City;
@interface Forecast48h : ForecastInterface
@property (nonatomic, retain) City *city;
@end
モデルのCl:
がこのObjective-Cのクラスを見てみましょう今、あなたは私のCoreDataモデルのプレゼンテーションをお尻の概要
@class City;
@interface Summary : ForecastInterface
@property (nonatomic, retain) City *city;
@end
し、最終的に
モデルForecastInterface
@interface ForecastInterface : NSManagedObject
@property (nonatomic, retain) NSDate * date;
@property (nonatomic, retain) NSString * descriptionLabel;
@property (nonatomic, retain) NSString * windDirection;
@property (nonatomic, retain) NSString * seaState;
@property (nonatomic, retain) NSNumber * day;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSString * probFreeze;
@property (nonatomic, retain) NSString * probSnow;
@property (nonatomic, retain) NSString * probRain;
@property (nonatomic, retain) NSNumber * tempMap;
@property (nonatomic, retain) NSString * tmpMax;
@property (nonatomic, retain) NSNumber * tmpSea;
@property (nonatomic, retain) NSString * tmpMin;
@property (nonatomic, retain) NSString * speedWind;
@property (nonatomic, retain) NSString * endDate;
@property (nonatomic, retain) NSString * startDate;
@end
[OK]を持っています。
なぜForecastやForecast48hタイプをサマリータイプにキャストできないのか理解したいですか?
この例を見て:
var listForecasts = Array<Any>()
self.listForecasts = city.bestForecastArray()
これは、いくつかの予測又はForecast48オブジェクトをフェッチし、NSArrayのを返すために、Objective-Cの方法です。
-(NSArray *)bestForecastArray;
ここで私は苦労している部分です。
私はlistForecastsをダンプするとき、それはForecastとForecast48hオブジェクトのみを含んでいます。
そして、私は私のセルをロードするとき、私はランタイムエラーがあります。
は、型の値をキャストすることができませんでした「Forecast48h_Forecast48h_」
「概要」に、すべての理由は、この二重のForecast48hの初エラーメッセージを入力しますか?
loadメソッドのプロトタイプ:
-(void)loadCell:(Summary*)weatherSummary;
私は本当にロードセル方式に要約オブジェクトを渡す必要があります。 Objective-Cではこれが受け入れられますが、Swiftでは受け入れられないのはなぜですか?
は、Objective-Cで書かれたワーキングこのコードを見てみましょう:
Summary* aSummary = [_listForecasts objectAtIndex:indexPath.row];
[cell setDelegate:self];
[cell loadCell:aSummary];
return cell;
これは、Objective-Cで働いていました。
助けが必要ですか?追加情報を躊躇しないでください。プロジェクトは複雑で、説明が難しい私はできるだけシンプルにしようとしました。
EDIT:
@interface Summary (Additions)
+(NSArray*)allSummaryOfCity:(NSManagedObjectContext *)context city:(City*)aCity;
+(NSArray *)arrayInformationsWithSummary:(Summary*)aSummary;
+(NSFetchedResultsController *)fetchControllerForAllSummaryOfCity:(NSManagedObjectContext *)context cityIndicatif:(NSString*)anIndicatifCity;
@end
ForecastInterface型からサマリー型に戻すことはできますか? – Balanced
@Balancedオブジェクトが実際にサマリータイプの場合にのみ有効です。オブジェクトの型がForecast48hの場合、キャストは常に失敗します。 Forecast48がSummaryのサブクラスだった場合は成功しますが、これはあなたのケースではありません。 –
私は今、ForecastInterface型を扱うためにloadCellメソッドを変更しました。しかし、このメソッドでは、Summary + Additionsファイルで実装されたSummaryタイプからいくつかの特定のメソッドが本当に必要になります。 – Balanced