具有相似方法的不同类

问题描述 投票:0回答:1

假设我正在使用UICollectionView制作可滚动页面。这些页面都是不同的,并由一个页面数组填充,如下所示:

let pages = [GreenPage(), YellowPage(), OrangePage(), YellowPage(), GreenPage()]

因此,为了清楚起见,页面将是绿色,然后是黄色,然后是橙色...

[现在,让我说,使它被点击时,它运行一个名为tapped()的函数,该函数出现在每个GreenPage(),YellowPage()和OrangePage()中。

现在,我看到的唯一方法是:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    if let greenPage = collectionView.cellForItem(at: indexPath) as! GreenPage {

        greenPage.tapped()

    } else if let yellowPage = collectionView.cellForItem(at: indexPath) as! YellowPage {

        yellowPage.tapped()

    } else if let orangePage = collectionView.cellForItem(at: indexPath) as! OrangePage {

        orangePage.tapped()

    }
}

这似乎是多余的。假设每个类的窃听函数都做同样的事情,还有另一种方法吗?谢谢!

swift xcode
1个回答
0
投票

这是协议的一个很好的例子。创建它

protocol Tappable {
    func tapped()
}

采用协议

class GreenPage : Tappable { ...
class YellowPage : Tappable { ...
class OrangePage : Tappable { ...

这将大大减少didSelectItemAt中的代码

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let page = collectionView.cellForItem(at: indexPath) as! Tappable
    page.tapped()
}
© www.soinside.com 2019 - 2024. All rights reserved.