基本的に、BaseObject という基本クラスがあります。RedObject、BlueObject と呼ばれる 2 番目のタイプのクラス。BaseObject クラスのサブクラスです。
したがって、RedObject.h には次のように記述されています。
#import "BaseObject.h"
@interface RedObject : BaseObject
BlueObject.h には、次のように記述されています。
#import "BaseObject.h"
@interface BlueObject : BaseObject
MyObject という 3 番目のタイプのクラスもあります。MyObject.h ファイルには、次のものがあります。
#import "RedObject.h"
#import "BlueObject.h"
@interface MyObject : NSObject
-(id)init:(char)objectType;
MyObject.m ファイルには、次のものがあります。
-(id)init:(char)objectType
{
self = [super init];
switch (objectType)
{
case 'R':
{
return [[RedObject alloc]init]; // this is where the yellow warning message 1
}
case 'B':
{
BlueObject *blueObject = [[BlueObject alloc]init];
return blueObject; // this is where the yellow warning message 2
}
default:
break;
}
return self;
}
警告メッセージ 1: RedObjectを返す互換性のないポインター型 '結果の型が 'MyObject*' の関数から'
警告メッセージ 2:結果型が 'MyObject*' の関数からBlueObject _strong' を返す互換性のないポインター型
呼び出し元クラスから MyObject のインスタンスをインスタンス化しようとすると、正常に動作します。RedObject/BlueObject および BaseObject のすべてのプロパティにアクセスしたことを確認できます。しかし、黄色の警告を修正する方法がわかりません。または、何かを逃した場合は?
MyObject *myObject = [[MyObject alloc]init:'R']; // or 'B'