輕松學(xué)習(xí)swift--swift項(xiàng)目初體驗(yàn)(一)

項(xiàng)目需求:做一個(gè)圖片瀏覽器,點(diǎn)擊圖片查看大圖,大圖模式下,左右滾動(dòng)能查看不同的圖片.
項(xiàng)目的主要核心技術(shù):圖片的彈出和消失動(dòng)畫

效果圖

項(xiàng)目源代碼: Photo-Browser

一.對(duì)代碼進(jìn)行重構(gòu)

1.對(duì)代碼進(jìn)行抽取劃分

1.1 為什么要對(duì)代碼進(jìn)行抽取?
swift中,代碼全部寫在一起,閱讀性極差

2.如何對(duì)代碼進(jìn)行抽取?

2.1在oc中,可以把功能模塊抽取一個(gè)個(gè)方法

2.2swift中,專門提供 extension ,可以對(duì)原有的類進(jìn)行擴(kuò)展

3.怎么使用extension 抽取代碼?

3.1 把一些方法寫在extension(擴(kuò)展)里面,這樣能減少viewDidLoad里面的代碼

3.2 extension可以寫多個(gè),這樣就可以把不同的功能模塊 ,寫在不同的擴(kuò)展里面

Paste_Image.png

二.項(xiàng)目基本設(shè)置

1.修改bundleID

2.部署版本

3.設(shè)置項(xiàng)目圖片,啟動(dòng)圖片

4.對(duì)文件夾目錄進(jìn)行劃分

三.首頁(yè)布局

1.讓首頁(yè)為UICollectionViewController

2.設(shè)置數(shù)據(jù)源

3.自定義布局

3.1 創(chuàng)建一個(gè)源文件,繼承自UICollectionViewFlowLayout
3.2 重寫 prepareLayout
3.3 設(shè)置布局的相關(guān)屬性

4.如何設(shè)置StoryBoard中的UICollectionViewController的布局

4.1 在StoryBoard中選中collectionView
4.2 在屬性里找到 layout 設(shè)置為自定義 custom
4.3 在下面的class里面 把自定義布局的類名寫進(jìn)去即可

Paste_Image.png

四.網(wǎng)絡(luò)工具類的封裝

1.集成CocoaPods, 并導(dǎo)入AFNetworking框架

1.1 打開(kāi)終端,進(jìn)入項(xiàng)目路徑下 cd 路徑
1.2 創(chuàng)建PodFile文件 pod init
1.3 配置PodFile文件 ,寫入要導(dǎo)入的框架

Paste_Image.png

1.4 導(dǎo)入框架 pod install —no-repo-update / 或 pod intall
1.41 pod install 會(huì)更新本地庫(kù)(本地已有的框架也會(huì)更新) 速度相對(duì)較慢
1.42 pod install —no-repo-update 不會(huì)更新本地庫(kù),速度相對(duì)來(lái)說(shuō)快點(diǎn)

2.封裝工具類

2.1 將工具類設(shè)計(jì)成單例對(duì)象
防止別人修改
防止多線程訪問(wèn),創(chuàng)建多個(gè)對(duì)象

2.2 swift中單例的設(shè)置方式
static let shareInstance : NetworkTools = NetworkTools()

2.3 可以讓工具類,直接繼承自用到框架的一個(gè)類
好處:自己就是這個(gè)類的子類,擁有這個(gè)類的所有方法和屬性,用的時(shí)候直接自己就能調(diào)用

Paste_Image.png

3.封裝網(wǎng)絡(luò)請(qǐng)求方法

 func requestData (type : Int , urlString : String ,
 parameters : [ String : NSObject] , callBack : 
(result : AnyObject? , error : NSErroe?) -> ()   )


func reqeustData(type : RequestType, urlString : String, 
parameters : [String : NSObject], finishedCallback : 
(result : AnyObject?, error : NSError?) -> ()) {   }

4.把方法里面的閉包抽取出來(lái)

4.1 為什么要抽取?
方法里面閉包很長(zhǎng),代碼很亂,造成閱讀性差

4.2 怎么抽取?
定義一個(gè)成員屬性 為閉包類型 把方法里面的閉包,用屬性名 替換

Paste_Image.png

五.項(xiàng)目集成工具類

 把封裝好的工具類,直接拖到項(xiàng)目文件中

六.請(qǐng)求網(wǎng)絡(luò)數(shù)據(jù)

1.在控制器中調(diào)用工具類封裝好的網(wǎng)絡(luò)請(qǐng)求方法

2.解析數(shù)據(jù)
要對(duì)獲取到的數(shù)據(jù)進(jìn)行類型轉(zhuǎn)換,應(yīng)為從網(wǎng)絡(luò)加載的數(shù)據(jù)類型為AnyObject

  guard let resultDict = result as? [String : NSObject] else {
            return
        }

  guard let dataArray = resultDict["data"] as? [[String : NSObject]] else {
            return
        }

3.字典轉(zhuǎn)模型

3.1 創(chuàng)建模型

3.2 通過(guò)kvc手動(dòng)轉(zhuǎn)模型 , 要重寫 override func setValue(value: AnyObject?, forUndefinedKey key: String) {}

3.3 注意: 在閉包中 self. 也不可以省略

七.自定義cell,展示數(shù)據(jù)

1.創(chuàng)建cell繼承自UICollectionViewCell

2.在cell里面定義模型屬性

3.監(jiān)聽(tīng)屬性改變(相當(dāng)于oc的重寫set方法)
在屬性監(jiān)聽(tīng)器(willSet, didSet) 這里用didSet方法里面給模型里面的屬性賦值

八.加載更多數(shù)據(jù)

1.什么時(shí)候加載更多的數(shù)據(jù)?
當(dāng)最后一個(gè)cell出現(xiàn)的時(shí)候

2.怎么監(jiān)聽(tīng)最后一個(gè)cell是否出現(xiàn)在屏幕上
通過(guò)cell(item)的下標(biāo)值(從0開(kāi)始)是否等于數(shù)組長(zhǎng)度 - 1

  // 最后一個(gè)cell已經(jīng)出現(xiàn)
    if indexPath.item == shops.count - 1 {
       indexPath.item 相當(dāng)于 tableView 的  indexPath.row
        loadHomeData(shops.count)
    }

3.怎么加載更多數(shù)據(jù)
和加載數(shù)據(jù)一樣,只不過(guò)多傳一個(gè)參數(shù)offset

九.彈出圖片瀏覽器

1.創(chuàng)建圖片瀏覽器的控制器對(duì)象UIViewController

2.彈出控制器
2.1 監(jiān)聽(tīng)cell的點(diǎn)擊
2.2 創(chuàng)建圖片瀏覽器控制器對(duì)象
2.3 設(shè)置圖片瀏覽器控制器對(duì)象的彈出樣式

 photoBrowserVc.modalTransitionStyle = .FlipHorizontal

2.4 把控制器modal出來(lái)

十.布局圖片瀏覽器

1.布局UICollectionView

1.1 創(chuàng)建UICollectionView
1.2 把UICollectionView添加到控制器的View上
1.3 設(shè)置數(shù)據(jù)源
1.4 自定義布局

2.布局兩個(gè)按鈕

2.1 創(chuàng)建兩個(gè)按鈕
2.2 設(shè)置按鈕的frame

2.3 對(duì)UIButton進(jìn)行extension(擴(kuò)展)
2.31 為什么要進(jìn)行擴(kuò)展
創(chuàng)建出來(lái)的按鈕,要設(shè)置圖片,字體,和文字,一個(gè)個(gè)設(shè)置太麻煩,想讓按鈕創(chuàng)建出來(lái)就有這些屬性
2.32 怎么進(jìn)行擴(kuò)展?
對(duì)UIButton進(jìn)行extension(擴(kuò)展) 擴(kuò)充一個(gè)類型方法,在類方法里面封裝好這些屬性

 class func createBtn(title : String, bgColor : UIColor, 
fontSize : CGFloat) -> UIButton {

    let btn = UIButton()

    btn.backgroundColor = bgColor
    btn.setTitle(title, forState: .Normal)
    btn.titleLabel?.font = UIFont.systemFontOfSize(fontSize)

    return btn
}

2.4 這樣創(chuàng)建還不是很方便,我們可以給UIbutton擴(kuò)展構(gòu)造函數(shù),創(chuàng)建的時(shí)候直接設(shè)置這些屬性

2.41 注意:在extension中擴(kuò)充構(gòu)造函數(shù),只能擴(kuò)充便利構(gòu)造函數(shù)

2.42 什么是便利構(gòu)造函數(shù)?
1.必須在init前面加上convenience
2.必須在init方法中 調(diào)用self.init()

convenience init(title : String, bgColor : UIColor, fontSize : CGFloat) {
    self.init()

    setTitle(title, forState: .Normal)
    backgroundColor = bgColor
    titleLabel?.font = UIFont.systemFontOfSize(fontSize)
}

3.監(jiān)聽(tīng)按鈕的點(diǎn)擊

3.1 xcode7.2 和xcode7.3中監(jiān)聽(tīng)方法的寫法不太一樣
Xcode7.2 --> 1> Selector("方法的名稱") 2> ""
Xcode7.3 --> #selector(類.方法名稱)

3.2 如果點(diǎn)擊按鈕調(diào)用的方法前面加上private 調(diào)用會(huì)報(bào)錯(cuò)
3.21 為什么會(huì)報(bào)錯(cuò)
找不到方法

3.22 監(jiān)聽(tīng)事件實(shí)質(zhì)就是發(fā)送一條消息

3.23 發(fā)送消息的過(guò)程是:
1.將消息包裝成@SEL 2.通過(guò)@SEL去類中的方法列表中找對(duì)相應(yīng)的方法(函數(shù))

3.34 在swift中,如果一個(gè)函數(shù)前面加上private,那么該函數(shù)就不會(huì)被添加到消息(映射)列表中

3.35 如果在private前面加上@objc ,就會(huì)保留oc的特性, 該方法依然會(huì)添加到消息列表中

3.3 解決問(wèn)題的方法就是 在private前面加上@objc 或者不寫private

想了解更多請(qǐng)查看:輕松學(xué)習(xí)swift--swift項(xiàng)目初體驗(yàn)(二)

項(xiàng)目源代碼: Photo-Browser
喜歡就給個(gè)星星吧

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蜓陌,隨后出現(xiàn)的幾起案子裹虫,更是在濱河造成了極大的恐慌蚕苇,老刑警劉巖宪潮,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異堡距,居然都是意外死亡趾断,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門噩咪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)顾彰,“玉大人极阅,你說(shuō)我怎么就攤上這事【醒耄” “怎么了涂屁?”我有些...
    開(kāi)封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)灰伟。 經(jīng)常有香客問(wèn)我拆又,道長(zhǎng),這世上最難降的妖魔是什么栏账? 我笑而不...
    開(kāi)封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任帖族,我火速辦了婚禮,結(jié)果婚禮上挡爵,老公的妹妹穿的比我還像新娘竖般。我一直安慰自己,他們只是感情好茶鹃,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布涣雕。 她就那樣靜靜地躺著,像睡著了一般闭翩。 火紅的嫁衣襯著肌膚如雪挣郭。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天疗韵,我揣著相機(jī)與錄音兑障,去河邊找鬼。 笑死蕉汪,一個(gè)胖子當(dāng)著我的面吹牛流译,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播者疤,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼福澡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了宛渐?” 一聲冷哼從身側(cè)響起竞漾,我...
    開(kāi)封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎窥翩,沒(méi)想到半個(gè)月后业岁,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡寇蚊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年笔时,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仗岸。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡允耿,死狀恐怖借笙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情较锡,我是刑警寧澤业稼,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站蚂蕴,受9級(jí)特大地震影響低散,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜骡楼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一熔号、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鸟整,春花似錦引镊、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至涉茧,卻和暖如春亮瓷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背降瞳。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蚓胸,地道東北人挣饥。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像沛膳,于是被迫代替她去往敵國(guó)和親扔枫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理锹安,服務(wù)發(fā)現(xiàn)短荐,斷路器,智...
    卡卡羅2017閱讀 134,599評(píng)論 18 139
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 10,868評(píng)論 6 13
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)叹哭、插件忍宋、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,022評(píng)論 4 62
  • 一之日觱發(fā),二之日栗烈风罩,三之日于耜糠排,四之日舉趾〕《七月》是詩(shī)三百里我最喜歡的一首入宦,因?yàn)檫@種隨時(shí)令而生生不息...
    曉春熙閱讀 272評(píng)論 0 1
  • 才發(fā)現(xiàn)玩滑板要滑開(kāi)了環(huán)視哺徊,不能只看前方,那樣不美乾闰,踩著風(fēng)火輪落追,看著后邊遠(yuǎn)去的風(fēng)景,道路涯肩,兩旁的風(fēng)景轿钠。風(fēng)景遠(yuǎn)去也是別...
    縱情嬉戲天地間閱讀 162評(píng)論 0 0