2014-08-28 18 views
2

当在Objective-C代码中定义如下时,如何从Swift中指定Item协议?如何在Swift中为Objective-C中定义的接口指定协议相同的名称

// 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. 

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

+0

当您为协议和类使用2个不同的名称时,它会更容易。但它将与像akashivskyy所说的明确类型一起工作。 Item类型的变量,并且符合一个名为Item的协议......虽然令人困惑。 – Binarian 2014-08-28 11:25:27

回答

5

您不能实例化协议类型,因此Item()将始终引用@interface Item。你应该明确指定你的意思是在你的宣言的协议:

var item: protocol<Item> 

顺便说一句,你在Objective-C不能在斯威夫特完成要做的事情 - 它需要在相同的所有声明范围将被唯一命名。按照Apple的惯例,您的对等项如下所示:

@objc(Item) protocol ItemType { 

} 

class Item: ItemType { 

} 
+0

Thnaks,但是如果类名和协议名称相同,则从Swift中指定时,编译器会显示错误:“协议类型'Item'不能在'protocol <...>''内使用。 如果我想从Swift中引用类名和协议名称是否不相同? – mono 2014-08-28 13:07:21

+1

在我看来 - 是的。出于同样的原因,Apple将其“NSObject”协议重命名为“NSObjectProtocol”。 – akashivskyy 2014-08-28 13:09:55

+1

只需在Objective-C代码中使用ItemType或ItemProtocol,它就会变得更安全和可读。 – akashivskyy 2014-08-28 13:10:40

相关问题