項(xiàng)目框架該如何搭建(Swift)

開(kāi)發(fā)一個(gè)APP就如同建一棟高樓,我們建樓第一步是打地基,然后澆筑出樓體浇借,最后在樓體內(nèi)才能進(jìn)行星星點(diǎn)點(diǎn)的砌墻和裝飾。App也是一樣怕品,我們的知識(shí)技術(shù)就是如同是基礎(chǔ)妇垢,是開(kāi)發(fā)App不可獲取的因素,而項(xiàng)目的框架就如同樓體堵泽,樓體能決定樓房的樣式修己,外形,一旦樓體有問(wèn)題迎罗,那么大樓就有倒塌的風(fēng)險(xiǎn),一個(gè)App片仿,如果框架搭的有問(wèn)題纹安,那么做出來(lái)的App也是有問(wèn)題的,換而言之,一個(gè)架構(gòu)師框架是否搭的合理直接決定這個(gè)能走多遠(yuǎn)厢岂,最后我們?cè)贏pp里添加功能光督,就如同裝修,是我們開(kāi)發(fā)工程師的主戰(zhàn)場(chǎng)塔粒,下面就拿音樂(lè)播放器做示例介紹一下搭建框架结借。

拿到一個(gè)項(xiàng)目不要急著上手,首先要分析項(xiàng)目的大體模塊卒茬,需要實(shí)現(xiàn)的功能船老,比如百度音樂(lè)就分為我的,列表圃酵,分類(lèi)柳畔,榜單四部分。你可以就將他看做四塊郭赐,分割開(kāi)來(lái)薪韩,一個(gè)模塊一個(gè)模塊的實(shí)現(xiàn),其中播放界面是所有模塊都必須有的捌锭,所以俘陷,可以單獨(dú)把他提出來(lái)做。

創(chuàng)建四個(gè)文件夾观谦,分別用來(lái)存儲(chǔ)四個(gè)模塊的代碼岭洲,創(chuàng)建一個(gè)根控制器模塊文件夾用于構(gòu)筑框架
//根據(jù)視圖控制器名字和對(duì)應(yīng)的屬性添加導(dǎo)航欄視圖控制器至tabBarController
private func addChildViewControllerWith(controllerName:String ,title:String ,imageName:String){
//swift系統(tǒng)中系統(tǒng)會(huì)在類(lèi)名前面加上一個(gè)命名空間,命名空間可以通過(guò)NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"]來(lái)獲取
let nameSpace = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"] as! String

    //根據(jù)一個(gè)類(lèi)名來(lái)加載類(lèi)objClass
    let objClass:AnyObject = NSClassFromString("\(nameSpace).\(controllerName)")!
    //將objClass轉(zhuǎn)化為真實(shí)的類(lèi)UITableViewController
    let realClass = objClass as! UITableViewController.Type
    //根據(jù)realClass實(shí)例化一個(gè)控制器對(duì)象
    let controller = realClass.init(style: .Plain)
    //創(chuàng)建導(dǎo)航欄控制器,并將controller設(shè)置為根視圖控制器
    let navc = UINavigationController(rootViewController: controller)
    //設(shè)置導(dǎo)航欄背景顏色
    navc.navigationBar.barTintColor = UIColor.blackColor()
    //設(shè)置導(dǎo)航欄文本顏色 titleTextAttributes文本屬性
    navc.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]
    //設(shè)置標(biāo)題
    controller.tabBarItem.title = title;
    controller.navigationItem.title = title;
    controller.tabBarItem.image = UIImage(named: imageName)
    //最后將導(dǎo)航欄視圖控制器添加到tabBarController上面
    addChildViewController(navc)
}

在這里我將四個(gè)控制進(jìn)行了封裝坎匿,把控制器名盾剩,屬性提出來(lái)存入json文件,只需要輸入控制器的一些屬性就可以創(chuàng)建不同的控制器出來(lái)

然后定義一個(gè)方法替蔬,傳入屬性創(chuàng)建控制器告私,在viewDidload中調(diào)用即可
private func addchildviewcontrollers(){
let path = NSBundle.mainBundle().pathForResource("BaseTBC", ofType: "json")
//path為可選類(lèi)型,必須在使用時(shí)進(jìn)行解包
let data = NSData(contentsOfFile: path!)
//異常捕獲承桥,如果do出現(xiàn)錯(cuò)誤驻粟,會(huì)走catch里的方法
do {
let rootArray = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers)
for dict in rootArray as! [[String:String]] {
addChildViewControllerWith(dict["controllerName"]!, title: dict["title"]!, imageName: dict["imageName"]!)
}
}catch{
//默認(rèn)的一些操作
addChildViewControllerWith("HomePageController", title: "視聽(tīng)盛宴", imageName: "cm2_note_icn_listen@2x")
addChildViewControllerWith("TopListTableViewController", title: "排行榜", imageName: "cm2_note_icn_logo@2x")
addChildViewControllerWith("CategoryTableViewController", title: "分類(lèi)", imageName: "cm2_btm_icn_music_prs@2x")
addChildViewControllerWith("UserTableViewController", title: "我的", imageName: "ic_radiopage_personal@2x")
}

這樣播放器的框架就大體出來(lái)了,這四個(gè)控制器就代表著四個(gè)模塊凶异,你只需要在四個(gè)控制器中分別完成相應(yīng)的代碼實(shí)現(xiàn)每個(gè)模塊的步驟就行了

在進(jìn)行開(kāi)發(fā)時(shí)蜀撑,最好將功能性質(zhì)相近的類(lèi)放在一起,比如封裝工具整理在一個(gè)文件夾剩彬,頭文件pch文件放在一個(gè)文件夾酷麦,系統(tǒng)類(lèi)放一個(gè)文件夾。這么做不僅是為了別人能夠看得明白喉恋,也便于自己可以排查錯(cuò)誤沃饶。出現(xiàn)bug了也不需要整個(gè)工程的找母廷,只需要排查某個(gè)模塊的代碼,解決bug的時(shí)間快了糊肤,這樣我們的工作效率也可以大幅度的提高琴昆,利人利己。
封裝也是項(xiàng)目中非常重要的一點(diǎn)馆揉,也可以稱(chēng)之為工廠模式业舍,將一段很多地方都會(huì)寫(xiě)到的代碼塊封裝成一個(gè)方法,不同的參數(shù)提出來(lái)升酣,需要的時(shí)候只需要調(diào)用該方法就行了舷暮,節(jié)省時(shí)間,而且可以使自己的代碼不會(huì)那么冗余拗踢。

實(shí)際開(kāi)發(fā)時(shí)不要怕麻煩脚牍,能封裝的盡量封裝,這一刻你確實(shí)花費(fèi)了功夫巢墅,但是后面就輕松許多诸狭,而且還能提高自己的技術(shù),豈不是一舉兩得君纫?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末驯遇,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蓄髓,更是在濱河造成了極大的恐慌叉庐,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件会喝,死亡現(xiàn)場(chǎng)離奇詭異陡叠,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)肢执,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)枉阵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人预茄,你說(shuō)我怎么就攤上這事兴溜。” “怎么了耻陕?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵拙徽,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我诗宣,道長(zhǎng)膘怕,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任梧田,我火速辦了婚禮淳蔼,結(jié)果婚禮上侧蘸,老公的妹妹穿的比我還像新娘裁眯。我一直安慰自己鹉梨,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布穿稳。 她就那樣靜靜地躺著存皂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪逢艘。 梳的紋絲不亂的頭發(fā)上旦袋,一...
    開(kāi)封第一講書(shū)人閱讀 51,443評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音它改,去河邊找鬼疤孕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛央拖,可吹牛的內(nèi)容都是我干的祭阀。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼鲜戒,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼专控!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起遏餐,我...
    開(kāi)封第一講書(shū)人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤伦腐,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后失都,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體柏蘑,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年粹庞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了咳焚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡信粮,死狀恐怖黔攒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情强缘,我是刑警寧澤督惰,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站旅掂,受9級(jí)特大地震影響赏胚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜商虐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一觉阅、第九天 我趴在偏房一處隱蔽的房頂上張望崖疤。 院中可真熱鬧,春花似錦典勇、人聲如沸劫哼。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)权烧。三九已至,卻和暖如春伤溉,著一層夾襖步出監(jiān)牢的瞬間般码,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工乱顾, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留板祝,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓走净,卻偏偏與公主長(zhǎng)得像券时,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子温技,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容