在swift中覆盖泛型函数错误

编程入门 行业动态 更新时间:2024-10-04 09:22:22
本文介绍了在swift中覆盖泛型函数错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

下面是代码:

class Test< T> { func foo< S:SequenceType其中S.Generator.Element == T>(par:S){ print(foo)} } class TestInh:Test< Int> {覆盖func foo< S:SequenceType其中S.Generator.Element == Int>(par:S){ print(loo)} }

它会大声说出这样的错误:

repl.swift:8:19:error:方法不覆盖其超类中的任何方法覆盖func foo< S:SequenceType其中S.Generator.Element == Int>(par: S){ ~~~~~~~~ ^

如何覆盖方法在超类 Test< Int> ?

============= =====额外=======================

说到代码打击。

class Test< T> { func foo(par:T){ print(foo)} } class TestInh:Test< Int> {覆盖func foo(par:Int){ print(loo)} }

一切正常。不知道发生在其中语句出现的情况。

解决方案

当继承您应该:

  • 使用覆盖与非 - 泛型方法;但
  • 使用 no 覆盖与通用的。
>

在这两种情况下,您仍然可以调用 super 执行所述方法。

$ b $因此,这应该工作:

class Base< T> { func testGeneric< S:SequenceType where S.Generator.Element == T>(sequence:S){ print(Base \(__ FUNCTION __)(sequence:\(sequence.dynamicType) )) func testNongeneric(element:T){ print(Base \(__ FUNCTION __)(element:\(element.dynamicType))) } } 类子类:Base< Int> { func testGeneric< S:SequenceType其中S.Generator.Element == Int>(sequence:S){ super.testGeneric(sequence) print(Subclass \(__ FUNCTION__) (sequence:\(sequence.dynamicType)))} 覆盖func testNongeneric(element:Int){ super.testNongeneric(element) print (Subclass \(__ FUNCTION __)(element:\(element.dynamicType)))} }

测试:

let base = Base< Double>() let subclass = Subclass() base.testGeneric([])//打印:Base testGeneric(sequence:Array< Double>) subclass.testGeneric([])//打印:Base testGeneric(sequence:Array< Int>) //子类testGeneric(sequence:Array< Int>) base.testNongeneric(0)// Prints:Base testNongeneric(element:Double) subclass.testNongeneric(0)//打印:Base testNongeneric(element:Int) //子类testNongeneric(元素:Int)

Here's the code:

class Test<T> { func foo<S:SequenceType where S.Generator.Element == T>(par : S){ print("foo") } } class TestInh : Test<Int> { override func foo<S:SequenceType where S.Generator.Element == Int>(par : S) { print("loo") } }

And it yells such error:

repl.swift:8:19: error: method does not override any method from its superclass override func foo<S:SequenceType where S.Generator.Element == Int>(par : S) { ~~~~~~~~ ^

How could I override the method in super class Test<Int>?

==================additional=======================

When it comes to the code blow.

class Test<T> { func foo(par : T){ print("foo") } } class TestInh : Test<Int> { override func foo(par : Int) { print("loo") } }

Everything works fine. Not knowing what happened on where statement's appearing.

解决方案

When inheriting a non-generic class from a generic one, you should:

  • Use override with non-generic methods; but
  • Use no override with generic ones.

In both cases you can still call super implementation of the said method.

Therefore, this should work:

class Base<T> { func testGeneric<S: SequenceType where S.Generator.Element == T>(sequence: S) { print("Base \(__FUNCTION__)(sequence: \(sequence.dynamicType))") } func testNongeneric(element: T) { print("Base \(__FUNCTION__)(element: \(element.dynamicType))") } } class Subclass: Base<Int> { func testGeneric<S: SequenceType where S.Generator.Element == Int>(sequence: S) { super.testGeneric(sequence) print("Subclass \(__FUNCTION__)(sequence: \(sequence.dynamicType))") } override func testNongeneric(element: Int) { super.testNongeneric(element) print("Subclass \(__FUNCTION__)(element: \(element.dynamicType))") } }

Test:

let base = Base<Double>() let subclass = Subclass() base.testGeneric([]) // Prints: Base testGeneric(sequence: Array<Double>) subclass.testGeneric([]) // Prints: Base testGeneric(sequence: Array<Int>) // Subclass testGeneric(sequence: Array<Int>) base.testNongeneric(0) // Prints: Base testNongeneric(element: Double) subclass.testNongeneric(0) // Prints: Base testNongeneric(element: Int) // Subclass testNongeneric(element: Int)

更多推荐

在swift中覆盖泛型函数错误

本文发布于:2023-11-26 23:21:16,感谢您对本站的认可!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:函数   错误   swift

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!