ฉันมี 2 คลาสหนึ่งมี methodA และอีกคลาสรวม methodB ดังนั้นในคลาสใหม่ฉันต้องแทนที่ method methodA และ methodB ดังนั้นฉันจะบรรลุการสืบทอดหลายรายการในวัตถุประสงค์ C ได้อย่างไร ฉันสับสนเล็กน้อยกับไวยากรณ์
ฉันมี 2 คลาสหนึ่งมี methodA และอีกคลาสรวม methodB ดังนั้นในคลาสใหม่ฉันต้องแทนที่ method methodA และ methodB ดังนั้นฉันจะบรรลุการสืบทอดหลายรายการในวัตถุประสงค์ C ได้อย่างไร ฉันสับสนเล็กน้อยกับไวยากรณ์
คำตอบ:
Objective-C ไม่รองรับการสืบทอดหลายรายการและคุณไม่จำเป็นต้องใช้ ใช้องค์ประกอบ:
@interface ClassA : NSObject {
}
-(void)methodA;
@end
@interface ClassB : NSObject {
}
-(void)methodB;
@end
@interface MyClass : NSObject {
ClassA *a;
ClassB *b;
}
-(id)initWithA:(ClassA *)anA b:(ClassB *)aB;
-(void)methodA;
-(void)methodB;
@end
ตอนนี้คุณต้องเรียกใช้วิธีการบน ivar ที่เกี่ยวข้อง เป็นรหัสมากกว่า แต่ไม่มีการสืบทอดหลายรายการเป็นคุณลักษณะภาษาในวัตถุประสงค์ -C
ClassA
และClassB
? ไม่เรียกร้องmethodA:
เกี่ยวกับการMyClass
อย่างใดเรียกโดยอัตโนมัติmethodA:
ในวันที่ClassA
?
นี่คือวิธีที่ฉันตั้งรหัส singletonPattern เป็น "ผู้ปกครอง" โดยทั่วไปฉันใช้โปรโตคอลและหมวดหมู่ร่วมกัน
สิ่งเดียวที่ฉันไม่สามารถเพิ่มได้คือ "ivar" ใหม่อย่างไรก็ตามฉันสามารถผลักดันมันด้วยวัตถุที่เกี่ยวข้องได้
#import <Foundation/Foundation.h>
@protocol BGSuperSingleton
+(id) singleton1;
+(instancetype)singleton;
@end
@interface NSObject (singleton) <BGSuperSingleton>
@end
static NSMutableDictionary * allTheSingletons;
+(instancetype)singleton
{
return [self singleton1];
}
+(id) singleton1
{
NSString* className = NSStringFromClass([self class]);
if (!allTheSingletons)
{
allTheSingletons = NSMutableDictionary.dictionary;
}
id result = allTheSingletons[className];
//PO(result);
if (result==nil)
{
result = [[[self class] alloc]init];
allTheSingletons[className]=result;
[result additionalInitialization];
}
return result;
}
-(void) additionalInitialization
{
}
เมื่อใดก็ตามที่ฉันต้องการให้คลาส "สืบทอด" BGSuperSingleton นี้ฉันก็ทำ:
#import "NSObject+singleton.h"
และเพิ่ม @interface MyNewClass () <BGSuperSingleton>
คุณรู้หรือไม่เกี่ยวกับ Protocols โปรโตคอลเป็นวิธีการใช้งานการสืบทอดหลาย ๆ
JAVA
, Interfaces
ไม่ได้ที่จะให้หรือมรดกหลายเลียนแบบ