gpt4 book ai didi

swift - 单例管理器 initWithDelegate

转载 作者:行者123 更新时间:2023-11-30 13:26:02 25 4
gpt4 key购买 nike

我有 2 名经理。一个是另一个的 child 。

Manager1.h

@protocol LoginDelegate <NSObject>

-(id) loginOK: (id) response;
-(id) loginKO: (id) response;

@end

@protocol LogoutDelegate <NSObject>

-(id) logoutOK: (id) response;
-(id) logoutKO: (id) response;

@end

@interface Manager1 : NSObject

- (id) init __attribute__((unavailable("You have to use Manager2 instead.")));
-(id) login;
-(id) logout;

@end

Manager1.m

@interface Manager1 ()

@property (nonatomic, weak) id <LoginDelegate> loginDelegate;
@property (nonatomic, weak) id <LogoutDelegate> logoutDelegate;

@end

@implementation Manager1

- (id)initWithDelegate:(id)aDelegate
{
self.logoutDelegate = aDelegate;
self.loginDelegate = aDelegate;

return self;
}

Manager2.h

@protocol OperationDelegate <NSObject>

-(id) operationOK: (id) response;
-(id) operationKO: (id) response;

@end

@interface Manager2 : Manager1

+ (Manager2 *)sharedInstance;
-(id)init __attribute__((unavailable("You have to use initWithDelegate instead.")));
-(id)initWithDelegate:(id)aDelegate;
-(void)doOperation;

@end

Manager2.m

@interface Manager2 ()

@property (nonatomic, weak) id <OperationDelegate> operationDelegate;

@end

@implementation Manager2

- (id)initWithDelegate:(id)aDelegate
{
if (self = [super initWithDelegate : aDelegate])
{
self.operationDelegate = aDelegate;
}

return self;
}

实际上,我可以毫无问题地执行我的方法。 (快速示例):

ViewController.m

let manager2 = Manager2(delegate: self)
manager2.login()
manager2.logout()
manager2.doOperation()

我的委托(delegate)的回应:

func loginOK(response: id) {

}

func loginKO(response: id) {

}

现在,我想要一个 Manager2 的单例。我在 Manager2.m尝试过:

static Manager2 *sharedManager = nil;

+ (Manager2 *) sharedManager
{
@synchronized(self)
{
if (sharedManager == nil)
sharedManager = [[self alloc] initWithDelegate:self];
}
return sharedManager;
}

ViewController1.m它可以响应。

let manager2 = Manager2(delegate: self)

ViewController2.m 不要响应任何内容。委托(delegate)无效。

let manager2 = Manager2.sharedIntance()

我该怎么做?我必须在共享实例中发送我的委托(delegate)吗?非常感谢

最佳答案

准确地说,您使用 Manager1 的 initWithDelegate 初始化了自身 Manager2 的实例

- (id)initWithDelegate:(id)aDelegate{
if (self = [super initWithDelegate:aDelegate]){
self.operationDelegate = aDelegate;
}
return self;
}

但是 Manager1 没有初始化它,而它应该是这样的

- (id)initWithDelegate:(id)aDelegate{
if (self = [super init]){
self.logoutDelegate = aDelegate;
self.loginDelegate = aDelegate;
}
return self;
}

关于swift - 单例管理器 initWithDelegate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37183233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com