swift – 协议是否有可能具有静态工厂方法的默认实现?

swift – 协议是否有可能具有静态工厂方法的默认实现?,第1张

概述考虑具有工厂方法的协议: public protocol Frobnicator { func frobnicate() static func makeRightFrobnicator() -> Frobnicator}private class SomeFrobnicatorImplementation: Frobnicator { ... }private class A 考虑具有工厂方法的协议:

public protocol Frobnicator {  func frobnicate()  static func makeRightFrobnicator() -> Frobnicator}private class SomeFrobnicatorImplementation: Frobnicator { ... }private class AnotherFrobnicatorImplementation: Frobnicator { ... }public extension Frobnicator {  static func makeRightFrobnicator() -> Frobnicator {    if something {      return SomeFrobnicatorImplementation()    } else {      return AnotherFrobnicatorImplementation()    }  }}

我希望能够在不同的时间构建不同的实现者.实现者本身对模块是私有的,而协议是公共的在客户端代码中使用.

当我尝试类似于上面的代码时,我得到“静态成员makeRightFrobnicator不能用于协议元类型Frobnicator.Protocol”.

有没有办法,或者我应该使用免费功能?

解决方法 静态函数实现是合法的:

protocol P {    static func f() -> P    init()}extension P {    static func f() -> P {return self.init()}}

但是你会注意到为了让它编译,我必须向编译器保证我手头有一个合法的方法来制作一个P,以便能够返回一个.

代码中的问题是尝试返回协议的特定采用者,例如SomeFrobnicatorImplementation.协议对谁采用它是不可知的.换句话说,您无法在协议定义中保证SomeFrobnicatorImplementation实际上将成为此协议的采用者.因此,您的代码部分是非法的.

总结

以上是内存溢出为你收集整理的swift – 协议是否有可能具有静态工厂方法的默认实现?全部内容,希望文章能够帮你解决swift – 协议是否有可能具有静态工厂方法的默认实现?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1006330.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-22
下一篇2022-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存