Ich versuche, eine Instanz einer Singleton-Klasse in Objective-C geschrieben zu erstellen. Ich muss mich an das Delegiertenprotokoll halten. Die Swift Implementierung sieht ungefähr so aus:Ambiguous Verweis auf Mitglied "Delegat"
class SomeClass: ManagerDelegate {
let manager = Manager.sharedInstance()
func someFunction(){
manager.delegate = self
}
}
Die Objective-C Singletonklasse etwa wie folgt aussieht:
// header
@protocol ManagerDelegate <NSObject>
@required
-(void)delegateMethod;
@end
@interface Manager : NSObject {
}
+ (id)sharedInstance;
@property (nonatomic, assign) id delegate;
@end
// class file
+ (id) sharedManager{
static Manager *theSharedManager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
theSharedManager = [[self alloc] init];
});
return theSharedManager;
}
- (void) someInternalMethod{
[delegate delegateMethod];
}
Nach den Delegaten Angabe (manager.delegate = self
), erhalte ich die Fehler
Unklarer Verweis auf Mitglied 'Delegierter'
Ist die Objective-C-Klasse nicht ordnungsgemäß erstellt oder wird sie falsch implementiert? Vermisse ich etwas anderes? so
let manager = Manager.sharedInstance() //manager is AnyObject due to bridging between objc and swift
gibt Ihnen ANYOBJECT für Manager Eigenschaft
Sie sagen "Die Objective-C-Singleton-Klasse sieht ungefähr so aus"; Erbt der Singleton nur von 'NSObject' oder erbt er auch von einem anderen Objekt? – Paulw11
Ich habe einen Test eingerichtet, der nur von NSObject erbt und immer noch den mehrdeutigen Referenzfehler empfängt. –
Ich weiß nicht, ob dies dem Problem mit dem Swift-Code helfen wird, aber die 'delegate'-Eigenschaft in der Objective-C-Klasse sollte als '@property (nonatomic, schwach) id delegate;'. –
rmaddy