首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用协议作为程序集接口时,Typhoon初始化失败

使用协议作为程序集接口时,Typhoon初始化失败
EN

Stack Overflow用户
提问于 2014-12-12 23:48:20
回答 1查看 231关注 0票数 1

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

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

示例代码如下:

这是可行的:

代码语言:javascript
复制
@class myCoreAssembly : TyphoonAssembly

@interface

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

(methods)

@end 

这不会:

代码语言:javascript
复制
@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 

在台风初始化过程中的某个时刻(method propertyForName:(NSString *)propertyName propertyName),代码会检查属性类型是否为TypeAssembly的子类。协议版本未通过此测试。

对解决方法有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2014-12-13 00:43:13

我想我找到了一个解决方案。我将属性输入为TyphoonAssembly,然后自动注入再次工作。

不起作用:

代码语言:javascript
复制
@property (readonly, weak, nonatomic) id <myCoreAssemblyProtocol> coreAssembly;

作品:

代码语言:javascript
复制
@property (readonly, weak, nonatomic) TyphoonAssembly <myCoreAssemblyProtocol> *coreAssembly;

这也是有意义的,因为要自动注入,属性需要是TyphoonAssembly的子类。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27447199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档