swift裡類方法和構造方法的使用來減少代碼冗餘提高開發效率

來源:互聯網
上載者:User

標籤:類方法   尺寸   width   添加   create   ram   效率   日常   custom   

對於日常中重複性的可以抽取的實現盡量抽取 比如實現導覽列右側

UIBarButtonItem的添加 如果使用

    private func setupNavigateionBar(){

        let btn = UIButton()

        btn.setImage(UIImage(named:"icon_shouye_off"), for: .normal)

        btn.sizeToFit()

        navigationItem.leftBarButtonItem = UIBarButtonItem(customView:btn)

        

        //右側導覽列設定多個功能item

        let firstbtn = UIButton()

        firstbtn.setImage(UIImage(named:"icon_shouye_off"), for: .normal)

        firstbtn.setImage(UIImage(named:"icon_shouye_on"), for: .highlighted)

        //使用sizetofit會根據圖片的大小動態適應改變item大小 要想自訂btn大小需使用自訂的size改變相鄰按鈕的間隔

        let size = CGSize(width: 40, height: 40)

        firstbtn.frame = CGRect(origin: CGPoint.zero, size: size)

 

        let firstRightItem = UIBarButtonItem(customView:firstbtn)

        

        let secondbtn = UIButton()

        secondbtn.setImage(UIImage(named:"icon_shouye_off"), for: .normal)

        secondbtn.setImage(UIImage(named:"icon_shouye_on"), for: .highlighted)

        secondbtn.sizeToFit()

        let secondRightItem = UIBarButtonItem(customView:secondbtn)

 

        let thirdbtn = UIButton()

        thirdbtn.setImage(UIImage(named:"icon_shouye_off"), for: .normal)

        thirdbtn.setImage(UIImage(named:"icon_shouye_on"), for: .highlighted)

        thirdbtn.sizeToFit()

        let thirdbtnRightItem = UIBarButtonItem(customView:thirdbtn)

        navigationItem.rightBarButtonItems = [firstRightItem, secondRightItem, thirdbtnRightItem]

 

        

    }

實現添加三個右側的導覽列Item 代碼冗餘比較嚴重就可以分別通過實作類別方法和構造方法兩種方式來實現抽取。

一、使用類方法

1.建立一個UIBarButtonItem-extension.swift檔案

import UIKit

 

extension UIBarButtonItem{

    //擴充一個類方法

    class func createItem(imageName:String, highImageName : String,size : CGSize) ->UIBarButtonItem{

        let btn = UIButton()

        btn.setImage(UIImage(named: imageName), for: .normal)

        btn.setImage(UIImage(named: highImageName), for: .highlighted)

        btn.frame = CGRect(origin:CGPoint.zero, size:size)

        

        return UIBarButtonItem(customView:btn)

    }

}

上面的冗餘方法即可最佳化為:

 let firstRightItem = UIBarButtonItem.createItem(imageName: "icon_shouye_off", highImageName: "icon_shouye_on", size: size)//UIBarButtonItem(customView:firstbtn)

二、使用建構函式方法

   //使用建構函式的方式實現上面的功能

    //便利建構函式 1>必須以convenience開頭 2>在建構函式中必須明確調用一個設計的建構函式,並且是self來調用的(self)3.建構函式不需要傳回值

    convenience init(imageName : String, highImageName: String, size : CGSize) {

        let btn = UIButton()

        btn.setImage(UIImage(named: imageName), for: .normal)

        btn.setImage(UIImage(named: highImageName), for: .highlighted)

        btn.frame = CGRect(origin:CGPoint.zero, size:size)

        

        self.init(customView: btn)

    

    }

  上面的冗餘方法即可最佳化為:  let secondRightItem = UIBarButtonItem(imageName : "icon_shouye_off", highImageName: "icon_shouye_on", size : size)///UIBarButtonItem(customView:secondbtn)

繼續最佳化給建構函式參數添加預設參數及邏輯判斷

    convenience init(imageName : String, highImageName: String = "", size : CGSize = CGSize.zero) {

        //1.建立button

        let btn = UIButton()

        //2.設定button圖片

        btn.setImage(UIImage(named: imageName), for: .normal)

        if highImageName != ""{

         btn.setImage(UIImage(named: highImageName), for: .highlighted)

        }

       //3.設定button的尺寸

        if size == CGSize.zero

        {

            btn.sizeToFit()

        }else{

         btn.frame = CGRect(origin:CGPoint.zero, size:size)

        }

       

        //4.建立UIbarbuttonItem

        self.init(customView: btn)

    

    }

左側的按鈕可以最佳化為

 navigationItem.leftBarButtonItem = UIBarButtonItem(imageName:"icon_shouye_off")//UIBarButtonItem(customView:btn)

 

swift裡類方法和構造方法的使用來減少代碼冗餘提高開發效率

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.