本文介绍了在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)} }一切正常。不知道发生在其中语句出现的情况。
解决方案当继承您应该:
>
在这两种情况下,您仍然可以调用 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中覆盖泛型函数错误
发布评论