这是代码:
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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。