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") } }
它大喊这样的错误:
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) { ~~~~~~~~ ^
如何在超类Test< Int>?中覆盖该方法?
==================额外=======================
谈到代码打击.
class Test<T> { func foo(par : T){ print("foo") }}class TestInh : Test<Int> { overrIDe func foo(par : Int) { print("loo") } }
一切正常.不知道哪里发生了什么声明.
解决方法 从泛型类继承非泛型类时,您应该:>使用非泛型方法覆盖;但
>不使用通用覆盖.
在这两种情况下,您仍然可以调用所述方法的超级实现.
因此,这应该工作:
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))") }}
测试:
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)@H_404_0@ 总结
以上是内存溢出为你收集整理的覆盖swift中的泛型函数错误全部内容,希望文章能够帮你解决覆盖swift中的泛型函数错误所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)