美文网首页iOS DeveloperiOSiOS点点滴滴
使用 extension 让你的代码更有条理

使用 extension 让你的代码更有条理

作者: PonyCui | 来源:发表于2015-12-01 11:05 被阅读540次

    你的 ViewController 非常混乱吗? 在 Swift 的世界里,有一种非常简单的魔法可以让你的 ViewController 变得条理分明。

    如果你不知道什么叫做 extension, 那你应该去看看 Swift 教程。

    简单来说,extension就是一个类的扩展,在 Objective-C 的世界里,它叫 Category。

    为什么使用 extension 可以使我们的代码变得更有条理,请看代码。

    假如我们有一个 UIViewController, 它控制着一个 UICollectionView,那么 UIViewController 也遵丛 UICollectionViewDataSource, UICollectionViewDelegate 两个协议,不使用 extension 的话,我们会这样写代码。

    class TopicDetailMembersViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {
        
        override func viewDidLoad() {
            super.viewDidLoad()
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
        }
        
        func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
            return 1
        }
        
        func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
            if let count = eventHandler.membersInteractor.topicItem?.members.count {
                return count
            }
            else {
                return 0
            }
        }
        
        func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
            let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath)
            return cell
        }
        
    }
    

    但其实,我们可以让事情变得更有趣一些,使用 extension 可以这样写

    class TopicDetailMembersViewController: UIViewController {
        
        override func viewDidLoad() {
            super.viewDidLoad()
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
        }
        
    }
    
    // MARK: - UICollectionViewDataSource, UICollectionViewDelegate
    extension TopicDetailMembersViewController: UICollectionViewDataSource, UICollectionViewDelegate {
        
        func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
            return 1
        }
        
        func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
            if let count = eventHandler.membersInteractor.topicItem?.members.count {
                return count
            }
            else {
                return 0
            }
        }
        
        func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
            let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath)
            return cell
        }
        
    }
    

    区分只是将一部分的代码移到另一个代码块中,代码量少的时候可能效果不明显,但当一个 ViewController 中充斥大量类似代码的时候,效果拔群。

    相关文章

      网友评论

        本文标题:使用 extension 让你的代码更有条理

        本文链接:https://www.haomeiwen.com/subject/gmpjhttx.html