如何在Swift中进行多重继承?

16

我需要实现一个从UITableViewController派生的类A和另一个从UICollectionViewController派生的类B,并且有许多共同点,所以我想将它们放在类C中,让A和B继承C。现在A和B都需要继承两个类,但是Swift不允许多重继承,那么该怎么实现呢?我知道Swift不支持多重继承,但是我仍然想知道如何实现上述操作。


1
让C继承自UIViewController,A和B继承自C。在A和B中根据需要实现表视图和集合视图协议,忽略UITableViewController和UICollectionViewController即可。它们基本上只是方便的类。 - Paulw11
3个回答

28

如@Paulw11在评论中所述是正确的。这里有一个例子,涉及到从C继承的AB。我已经将其命名为DogViewControllerCatViewController(继承自PetViewController)。您可以看到协议可能会有用。这只是一个非常基本的例子。

protocol Motion {
    func move()
}

extension Motion where Self: PetViewController {

    func move() {
        //Open mouth
    }

}

class PetViewController: UIViewController, Motion{
    var isLoud: Bool?

    func speak(){
        //Open Mouth
    }
}

class DogViewController:PetViewController {

    func bark() {

        self.speak()

        //Make Bark Sound
    }
}

class CatViewController: PetViewController {

    func meow() {

        self.speak()

        //Make Meow Sound


    }

}

//....

let cat = CatViewController()
cat.move()
cat.isLoud = false
cat.meow()

5

在Swift中无法实现多重继承,解决方法是使用协议(Protocols),但这是一个相对较大的话题,无法仅通过简短回答来概括。

还有许多其他类似范围的问题


5

Swift不允许多重继承,但可以遵循任何协议。协议类似于Java中的接口。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接