协议中的Swift声明类Func

我有以下困惑。据我所知,在声明方法时,staticclass关键字之间的主要区别在于第二个关键字可以在子类中重写

问题

但是,当我在Swift 1.2中声明协议时,如下所示:

协议MyProtocol
{
类func dummyClassMethod()
}

编译器给出一个错误:

类方法只允许在类内使用;使用“static”来声明
静态方法

这个错误非常具有描述性,因为MyProtocol显然不是一个类,但是我想让一个类func成为协议的一部分

我尝试过的

我发现,如果我在协议中将接口声明为static,编译器会很高兴,并且我可以在采用此协议的所有类中使用此static方法:

协议MyProtocol
{
静态func dummyClassMethod()
}

问题

所以我的问题基本上是这是对的吗?此声明声明我的类方法不能在子类中重写,但是在我的实现中,我可以编写并使用以下内容:

A类:MyProtocol
{
类func dummyClassMethod(){
}
}
B类:A类
{
重写类func dummyClassMethod(){
}
}

现在我的dummyClassMethod不再是静态的

  1. 编译器是正常的,一切正常-但为什么

  2. 然而,它是否特定于接口本身是静态的这一事实
    它的实现不是吗

  3. 协议中的类func有更好的替代方案吗

目标C解决方案

在ObjC中,这非常容易编译&完美运行:

@协议MyProtocol
+(无效)Dummy方法;
@结束

您可以查看苹果的文档(小节方法要求

有人说:

与类型属性要求一样,当在协议中定义类型方法要求时,始终使用static关键字作为它们的前缀。即使类型方法要求在由类实现时以静态关键字作为前缀,也是如此

在实践中,您可以按如下方式执行:

首先,声明您的协议:

协议{
静态func方法()
}

然后,在您的课程中两个选项

第一名:

类SomeClass:SomeProtocol{
类func someMethod()
}

秒:

类SomeClass:SomeProtocol{
静态func方法()
}

我希望这能澄清你的疑问

发表评论