如果在Objective-C代码中定义如下,我如何从Swift中指定Item协议?
// Objective-C
@protocol Item <NSObject>
@end
@interface Item : NSObject<Item>
@end
@implementation Item
@end
// Swift
var item = Item() // item interface, but I'd like to define as Item protocol.
Run Code Online (Sandbox Code Playgroud)
我应该定义为不同的名称吗?
您无法实例化协议类型,因此Item()将始终引用@interface Item.您应明确指定您的声明中的协议:
var item: protocol<Item>
Run Code Online (Sandbox Code Playgroud)
顺便说一句,你在Objective-C中完成的事情不能在Swift中完成 - 它要求在同一范围内的所有声明都是唯一命名的.根据Apple的惯例,您的等价物如下所示:
@objc(Item) protocol ItemType {
}
class Item: ItemType {
}
Run Code Online (Sandbox Code Playgroud)