gpt4 book ai didi

ios - 使用协议(protocol)作为程序集接口(interface)时 Typhoon 初始化失败

转载 作者:行者123 更新时间:2023-11-29 12:31:54 26 4
gpt4 key购买 nike

我正在尝试将大型应用程序转换为使用协议(protocol)而不是类作为程序集。这一切都相当简单,但无法正确初始化。我已经追查了这个问题。当 Typhoon 初始化程序集时,它会询问每个程序集的属性,如果它们是 Typhoon 类,则初始化它们。当我将类型化的属性转换为 Typhoon 类时,效果很好;当我将属性转换为协议(protocol)类型时,Typhoon 无法将其识别为 Typhoon 类并且不会对其进行初始化,因此初始化失败。

所有相关的 Typhoon 代码都在 [TyphoonAssembly init] 中的 resolveCollaboratingAssemblies 方法中。

示例代码:

这个有效:

@class myCoreAssembly : TyphoonAssembly

@interface

@property (readonly, weak, nonatomic) myCoreAssembly *coreAssembly;

(methods)

@end

这不是:

@protocol myCoreAssemblyProtocol

@interface

@property (readonly, weak, nonatomic) id <myCoreAssemblyProtocol> coreAssembly;

(methods)

@end

@class myCoreAssembly :TyphoonAssembly <myCoreAssemblyProtocol>

@interface

@property (readonly, weak, nonatomic) id <myCoreAssemblyProtocol> coreAssembly;

(methods)

@end

在 Typhoon Init 过程中的某一时刻(方法 propertyForName:(NSString *)propertyName isCollaboratingAssemblyPropertyOnClass:(Class)class)代码检查属性类型是否是 TypeAssembly 的子类。协议(protocol)版本未通过此测试。

有什么解决方法吗?

最佳答案

我想我已经找到了解决方案。我将属性键入为 TyphoonAssembly,自动注入(inject)再次起作用。

没用:

@property (readonly, weak, nonatomic) id <myCoreAssemblyProtocol> coreAssembly;

作品:

@property (readonly, weak, nonatomic) TyphoonAssembly <myCoreAssemblyProtocol> *coreAssembly;

这也是有道理的,因为要自动注入(inject)属性需要是 TyphoonAssembly 的子类。

关于ios - 使用协议(protocol)作为程序集接口(interface)时 Typhoon 初始化失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27447199/

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