如何为Swift中的Objective-C中定义的接口指定协议相同的名称

mon*_*ono 2 objective-c swift

如果在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)

我应该定义为不同的名称吗?

aka*_*kyy 5

您无法实例化协议类型,因此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)