覆盖swift中的泛型函数错误
发布时间:2020-12-14 05:01:33 所属栏目:百科 来源:网络整理
导读:这是代码: class TestT { func fooS:SequenceType where S.Generator.Element == T(par : S){ print("foo") }}class TestInh : TestInt { override func fooS:SequenceType where S.Generator.Element == Int(par : S) { print("loo") } } 它大喊这样的错误
这是代码:
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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |