Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
继承类[Swift]中类func()的奇怪歧义_Swift_Inheritance_Swift5 - Fatal编程技术网

继承类[Swift]中类func()的奇怪歧义

继承类[Swift]中类func()的奇怪歧义,swift,inheritance,swift5,Swift,Inheritance,Swift5,我在Swift中有一个简单的类层次结构 class Parent { var name:String = "Unnamed" class func all() -> [Parent] { return Dad.all() + Mom.all() } } class Dad:Parent { static var AllDads:[Dad] = [] class func all() -> [Dad] { re

我在Swift中有一个简单的类层次结构

class Parent {
    var name:String = "Unnamed"
    class func all() -> [Parent] {
        return Dad.all() + Mom.all()
    }
}

class Dad:Parent {
    static var AllDads:[Dad] = []

    class func all() -> [Dad] {
        return AllDads
    }
}

class Mom:Parent {
    static var AllMoms:[Mom] = []

    class func all() -> [Mom] {
        return AllMoms
    }
}

Mom.all().forEach { mom in
    print(mom.name)
}

如果我把它放在一个工作区,在我点击run按钮之前,一切都很好。这时它告诉我最后一个表达式
Mom.all()
是不明确的。为什么会这样?有没有办法让一个类func在子类中细化子类型,并保持它们的明确性?

直到您实例化一个Mom,并在该Mom实例上调用它,它将是不明确的。

原因是
上的
all
Mom
上的
all
具有不同的签名。因此,
Mom
上的
all
不能作为
Parent
上的覆盖(编译器不需要
override
关键字这一事实也表明了这一点)。这意味着
Mom
类型上存在两个名为
all
的类函数。此外,传递给
forEach
的闭包没有指定参数类型,因此无法确定引用了这两个函数中的哪一个。将类型指定给
forEach
中的
mom
参数将解决此问题。

将方法命名为动词短语(
getAll
),将属性命名为名词,以避免奇怪的大小写。是的,现在有意义了。一旦我将
中的
mom改为
(mom:mom)
,一切都很好。