在swift中覆盖泛型函数错误 [英] Overriding generic function error in swift
本文介绍了在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中覆盖泛型函数错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文