在Objective C中,@ interface和@protocol可以具有相同的名称。如何在Swift中创建一个只采用协议的类?
@interface NICellObject : NSObject <NICellObject>
// Designated initializer.
- (id)initWithCellClass:(Class)cellClass userInfo:(id)userInfo;
- (id)initWithCellClass:(Class)cellClass;
+ (id)objectWithCellClass:(Class)cellClass userInfo:(id)userInfo;
+ (id)objectWithCellClass:(Class)cellClass;
@property (nonatomic, strong) id userInfo;
@end
如何采用协议NICellObject ,不使用子类类NICellObject
答案 0 :(得分:6)
将目标c类导入swift时,&#34; Protocol&#34;将自动附加到协议的名称。所以你应该采用XXXXXProtocol。
我刚刚在我的本地项目中尝试过。在您的情况下NICellObjectProtocol。
你错了,他们是同名的两个不同的东西。一个是名为NICellObject的协议,另一个名为NICellObject的类。
如何使用一个协议在swift中实现两个协议也是一个 class在Nimbus中有NICellObject,它是一个协议和一个类, 请参阅下面的代码。必须有许多相同的案例。
一些协议将许多不相关的方法分组(而不是创建 几个单独的小协议)。这些协议往往是 与作为主要表达式的类相关联 协议。在这些情况下,惯例是给出协议 与班级同名。
在Swift中无法做到这一点。我无法找到该文件,但有些提示从语言参考中,声明会在您的程序中引入新名称或合同。
“声明会在您的计划中引入新名称或构造。 例如,您使用声明来引入函数和方法, 变量和常量,以及定义新的命名枚举, 结构,类和协议类型。您也可以使用声明 扩展现有命名类型的行为并导入符号 进入你在别处宣布的程序。
”
摘要来自:Apple Inc.“The Swift Programming Language”.iBooks。 https://itun.es/cn/jEUH0.l
答案 1 :(得分:1)
只需在协议名称中添加Protocol
后缀,即可区分类和协议:
class A: BaseObject, NICellObjectProtocol { }