当前位置:  开发笔记 > IOS > 正文

通过遵循Swift 2中的协议来扩展类型数组

如何解决《通过遵循Swift2中的协议来扩展类型数组》经验,为你挑选了1个好方法。

我想扩展一个类型化数组Array,使其符合协议SomeProtocol。现在我知道您可以扩展如下的类型化数组:

extension Array where Element: SomeType { ... }

您还可以扩展对象以遵循以下协议:

extension Array: SomeProtocol { ...  }

但是我无法弄清楚什么是使类型化数组符合协议的正确语法,例如:

extension (Array where Element: SomeType): SomeProtocol { ... }

任何Swift 2专家都知道该怎么做?



1> R Menke..:

您不能对一致性应用很多逻辑。它要么符合,要么不符合。但是,您可以对扩展应用一些逻辑。下面的代码使设置一致性的特定实现变得容易。这是重要的部分。

以后将其用作类型约束。

class SomeType { }

这是你的协议

protocol SomeProtocol {

    func foo()

}

这是协议的扩展。实施foo()中的扩展SomeProtocol创建一个默认。

extension SomeProtocol {

    func foo() {
        print("general")
    }
}

现在Array符合SomeProtocol使用的默认实现foo()。现在,所有数组都将foo()作为一种方法,这不是超级优雅。但是它什么也没做,所以不会伤害任何人。

extension Array : SomeProtocol {}

现在很酷的东西:如果我们创建一个Array具有类型约束的扩展,Element我们可以覆盖的默认实现foo()

extension Array where Element : SomeType {
    func foo() {
        print("specific")
    }
}

测试:

let arrayOfInt = [1,2,3]
arrayOfInt.foo() // prints "general"

let arrayOfSome = [SomeType()]
arrayOfSome.foo() // prints "specific"

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有