protocol Fooable { typealias T: Equatable func makeFoo() -> T}@H_301_7@我希望,符合它的所有类型都将从makeFoo返回Equatable值. @H_301_7@现在我想创建一个数组扩展,它存储Fooable值: @H_301_7@
extension Array where Element: Fooable { func arrayFoo<F: Foobable,S>(array: Array<F>,transform: (Element,[F]) -> S) -> [S] {@H_301_7@我希望,给定数组A,其中包含Fooable元素和数组B,其中包含我可以制作的Fooable元素: @H_301_7@
a.arrayFoo(b,{...})@H_301_7@我有一部分arrayFoo函数: @H_301_7@
var leftGenerator = self.generate()var rightGenerator = array.generate()if let leftValue = leftGenerator.next(),rightValue = rightGenerator.next() { let leftFoo = leftValue.makeFoo() let rightFoo = rightValue.makeFoo() if leftFoo == rightFoo {@H_301_7@我希望leftFoo和rightFoo是Equatable,因为它们是由makeFoo()生成的,它应该返回Equatables. @H_301_7@但Swift抱怨:二进制运算符==不能应用于Element.T和F.T类型的 *** 作数 @H_301_7@任何想法或解决方法?解决方法 在您的arrayFoo()方法中,array和self都是数组
Fooable元素,但不一定具有相同的底层元素
类型T,即Element.T和F.T是不相关的类型. @H_301_7@ @H_301_7@您可以使用其他约束来解决此问题
其中F.T == Element.T类型占位符: @H_301_7@
func arrayFoo<F: Fooable,S where F.T == Element.T >(array: Array<F>,[F]) -> S) -> [S] { // ...}总结
以上是内存溢出为你收集整理的协议和泛型类型中的Swift类型全部内容,希望文章能够帮你解决协议和泛型类型中的Swift类型所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)