項(xiàng)目從Objective-c轉(zhuǎn)為Swift過程總結(jié)

Swift是蘋果于2014年WWDC(蘋果開發(fā)者大會)發(fā)布的新開發(fā)語言,用于搭建基于蘋果平臺的應(yīng)用程序。作為蘋果公司力推的新語言,Swift受到了廣大蘋果開發(fā)者的重視退敦。當(dāng)下,學(xué)習(xí)Swift蚣抗,并且能夠用Swift進(jìn)行項(xiàng)目開發(fā)侈百,已經(jīng)是一名iOS開發(fā)者必不可缺的能力之一了。

最近工作進(jìn)度不是很緊張翰铡,就準(zhǔn)備把之前學(xué)習(xí)的swift語法落實(shí)到項(xiàng)目當(dāng)中钝域,于是作死般得想把手頭上負(fù)責(zé)的一個oc語言的iOS項(xiàng)目,轉(zhuǎn)換成swift語言锭魔,一來可以檢測自己的學(xué)習(xí)情況例证,二來可以為以后的swift開發(fā)打下基礎(chǔ)。接下來就總結(jié)一下轉(zhuǎn)換中的心得吧迷捧。

一织咧、文件

oc項(xiàng)目中的每個類是有.h和.m兩個文件組成伐割,.h表示頭文件草添,用來聲明各種成員變量榜配,方法馋没,屬性之類的。在import的時候用頭文件上忍。.m 主要用來實(shí)現(xiàn).h 里聲明的方法怒见。

oc文件.png

Swift項(xiàng)目中的每個類只有一個.swift文件拱层,聲明和實(shí)現(xiàn)都在.swift文件中。而且你會發(fā)現(xiàn)類與類之間的調(diào)用绿渣,完全不需要加頭文件了朝群,而是天然地?fù)碛挟?dāng)前模塊的所有class燕耿,非常方便中符。

swift文件.png

二、對象初始化

oc語言:

//oc寫法
UIColor *color1 = [[UIColor alloc] init];
UIColor *color2 = [UIColor colorWithRed:243/255.0 green:243/255.0 blue:243/255.0 alpha:1.0];
oc語言初始化提示方法.png

Swift語言:

//轉(zhuǎn)換成swift的寫法
let color1: UIColor = UIColor()
let color2: UIColor = UIColor(red: 243/255.0, green: 243/255.0, blue: 243/255.0, alpha: 1.0)
Swift構(gòu)造函數(shù)提示方法.png

1誉帅、oc語言的最簡單的初始化對象是用 [[Class alloc] init] 或者[Class new]淀散;Swift最簡單初始化只需要Class()。
2蚜锨、oc語言喜歡用類名的后綴來作為系列初始化方法的開頭档插,所以對于系統(tǒng)類庫,我們一般用寫類的后綴來讓xCode幫我們聯(lián)想到方法亚再;
Swift語言化簡了一長串的類名郭膛,用參數(shù)名來傳達(dá)語意,我們可以寫出類名氛悬,然后再打一個左括號"("则剃,xCode就會幫我們聯(lián)想出所有的構(gòu)造函數(shù)。

三如捅、對self的簡化

這個比較抽象棍现,舉個例子吧:在使用自己的導(dǎo)航控制器的時候,oc中一定要指明是self.navigationController镜遣;而Swift中直接navigationController

//oc寫法
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
//轉(zhuǎn)換成swift的寫法
navigationController?.navigationBar.barStyle = UIBarStyle.black

四己肮、項(xiàng)目的宏定義文件

在中大型項(xiàng)目中,我們需要將一些常用變量或者方法的宏定義悲关,方便在多個文件中使用谎僻。oc語言中可以直接創(chuàng)建一個頭文件,用宏定義#define寓辱;Swift語言中是不能使用宏定義語法的戈稿,但是因?yàn)槊臻g的緣故,我們可以給我們的項(xiàng)目添加一個空的Const.swift文件讶舰,在其中鞍盗,我們將原本oc中不需要接受參數(shù)的宏,定義成let常量跳昼,將需要接受參數(shù)的宏定義成函數(shù)即可般甲,由于我們的整個項(xiàng)目共享命名空間,我們就可以在項(xiàng)目內(nèi)的任何地方直接使用Const.swift中定義的這些公共的常量和函數(shù)鹅颊。
1敷存、沒有參數(shù)的宏

//oc中的宏定義
#define IS_IOS7LATER    ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0 ? YES : NO)
#define IS_IOS8LATER    ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0 ? YES : NO)
#define kScreenHeight     [UIScreen mainScreen].bounds.size.height
#define kScreenWidth      [UIScreen mainScreen].bounds.size.width

//轉(zhuǎn)換成swift的寫法
let IS_IOS7LATER = Double(UIDevice.current.systemVersion)! >= 7.0 ? true :false
let IS_IOS8LATER = Double(UIDevice.current.systemVersion)! >= 8.0 ? true :false
let kScreenHeight = UIScreen.mainScreen().bounds.size.height
let kScreenWidth = UIScreen.mainScreen().bounds.size.width

2、接收參數(shù)的宏

//oc寫法
#define RGB_COLOR(r,g,b)            [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:1]
#define RGBA_COLOR(r,g,b,a)         [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:(a)]
#define HEX_RGB_COLOR(rgbValue)     [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]
#define HEX_RGBA_COLOR(rgbValue,a)  [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0x00FF00) >> 8))/255.0 blue:((float)(rgbValue & 0x0000FF))/255.0 alpha:a]

//轉(zhuǎn)換成swift的寫法
func RGB_COLOR(r:CGFloat,_ g:CGFloat,_ b:CGFloat) -> UIColor
{
    return UIColor(red: (r)/255.0, green: (g)/255.0, blue: (b)/255.0, alpha: 1.0)
}

func RGBA_COLOR(r:CGFloat,_ g:CGFloat,_ b:CGFloat,_ a:CGFloat) -> UIColor
{
    return UIColor(red: (r)/255.0, green: (g)/255.0, blue: (b)/255.0, alpha: a)
}

func HEX_RGB_COLOR(rgbValue:Int) -> UIColor
{
    return UIColor(red: CGFloat((rgbValue & 0xFF0000) >> 16)/255.0, green: CGFloat((rgbValue & 0xFF00) >> 8)/255.0, blue: CGFloat((rgbValue & 0xFF))/255.0, alpha: 1.0)
}

func RGB_COLOR(rgbValue:Int,_ a:CGFloat) -> UIColor
{
    return UIColor(red: CGFloat((rgbValue & 0xFF0000) >> 16)/255.0, green: CGFloat((rgbValue & 0xFF00) >> 8)/255.0, blue: CGFloat((rgbValue & 0xFF))/255.0, alpha: a)
}

五、類的擴(kuò)展

在oc語言中锚烦,我們經(jīng)常使用類別來為現(xiàn)有的類添加新的方法觅闽。舉一反三,我也新建文件的時候涮俄,選擇創(chuàng)建Swift File,可是沒有看到下圖所示的蛉拙,和oc語言一樣的File Type選擇,讓我一時不知所措彻亲。后來仔細(xì)思考之后孕锄,發(fā)現(xiàn)swift的擴(kuò)展extension和OC的類別是如出一轍。

oc語言選擇文件類型.png

而至于oc的擴(kuò)展苞尝,只是對某個類的接口進(jìn)行擴(kuò)展,這個是我們用的比較多的畸肆,一般我們習(xí)慣在.m文件中添加擴(kuò)展,然后把一些私有的宙址、不想讓外部訪問的接口和屬性定義在這里轴脐;swift根本不需要類似OC擴(kuò)展的東西。因?yàn)閟wift只有一個文件呀抡砂。它的所有的東西都在class內(nèi)大咱。

這樣分析之后就很清楚了,我們只需要選擇Swift File創(chuàng)建一個swift文件就可以了舀患,然后用extension來為已有的類添加方法徽级。

extension UIColor {
    // 便利初始化方法
    convenience init(r: CGFloat, g: CGFloat, b: CGFloat, a: CGFloat = 1.0) {
        self.init(red: r / 255.0, green: g / 255.0, blue: b / 255.0, alpha: a)
    }
    
    convenience init(rgbValue: Int, a: CGFloat = 1.0) {
        self.init(red: CGFloat((rgbValue & 0xFF0000) >> 16)/255.0, green: CGFloat((rgbValue & 0xFF00) >> 8)/255.0, blue: CGFloat((rgbValue & 0xFF))/255.0, alpha: a)
    }
}

六、自定義UITableViewCell的控件數(shù)據(jù)綁定

做過iOS開發(fā)的同學(xué)們肯定都對TableView不陌生吧聊浅,在項(xiàng)目開發(fā)中餐抢,我們不免要自定義一個UITableViewCell的子類,然后傳進(jìn)來一個數(shù)據(jù)模型或者字典低匙,根據(jù)數(shù)據(jù)對控件進(jìn)行數(shù)據(jù)綁定旷痕,展示不同的數(shù)據(jù)內(nèi)容。

oc語言中顽冶,我們將數(shù)據(jù)模型定義成類的強(qiáng)指針成員變量欺抗,然后重寫set方法去實(shí)現(xiàn):

@property (nonatomic, strong) Video *video;

- (void)setVideo:(Video *)video
{
    _video = video;
    
    self.screenShotImageView.image = [UIImage imageNamed:video.imageName];
    self.titleLabel.text = video.title;
    self.sourceLabel.text = video.source;
}

Swift語言中,我們通過屬性觀察器實(shí)現(xiàn):

var video: Video?{
        didSet {
            if let imageName = video?.imageName,
                let title = video?.title,
                let source = video?.source {
                screenShotImageView.image = UIImage(named:imageName)
                titleLabel.text = title
                sourceLabel.text = source
            }
        }
    }

持續(xù)更新中强重。绞呈。。间景。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末佃声,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子倘要,更是在濱河造成了極大的恐慌圾亏,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異志鹃,居然都是意外死亡夭问,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門曹铃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缰趋,“玉大人,你說我怎么就攤上這事铛只〔号郑” “怎么了糠溜?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵淳玩,是天一觀的道長。 經(jīng)常有香客問我非竿,道長蜕着,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任红柱,我火速辦了婚禮承匣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锤悄。我一直安慰自己韧骗,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布零聚。 她就那樣靜靜地躺著袍暴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪隶症。 梳的紋絲不亂的頭發(fā)上政模,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機(jī)與錄音蚂会,去河邊找鬼淋样。 笑死,一個胖子當(dāng)著我的面吹牛胁住,可吹牛的內(nèi)容都是我干的趁猴。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼彪见,長吁一口氣:“原來是場噩夢啊……” “哼儡司!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起企巢,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤枫慷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體或听,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡探孝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了誉裆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片顿颅。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖足丢,靈堂內(nèi)的尸體忽然破棺而出粱腻,到底是詐尸還是另有隱情,我是刑警寧澤斩跌,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布绍些,位于F島的核電站,受9級特大地震影響耀鸦,放射性物質(zhì)發(fā)生泄漏柬批。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一袖订、第九天 我趴在偏房一處隱蔽的房頂上張望氮帐。 院中可真熱鬧,春花似錦洛姑、人聲如沸上沐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽参咙。三九已至,卻和暖如春产徊,著一層夾襖步出監(jiān)牢的瞬間昂勒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工舟铜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留戈盈,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓谆刨,卻偏偏與公主長得像塘娶,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子痊夭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

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

  • 轉(zhuǎn)載自:https://github.com/Tim9Liu9/TimLiu-iOS 目錄 UI下拉刷新模糊效果A...
    袁俊亮技術(shù)博客閱讀 11,928評論 9 105
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫刁岸、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,105評論 4 62
  • 一個人所有的鄉(xiāng)愁她我,最初都是來自于食物虹曙。 高中畢業(yè)以后迫横,不時地總會看見微博和朋友圈的好友發(fā)過一些動態(tài),說想念家鄉(xiāng)的蒸...
    魯慢閱讀 516評論 0 2
  • 下班時呛讲,把手機(jī)放在書包里,摘掉耳機(jī)返奉,不去思考跟自己生活有關(guān)的事情贝搁,靜靜地覺察著周圍的一切,花草樹木芽偏、小昆蟲...
    李沐羲閱讀 529評論 0 0
  • 是的雷逆,有個好消息和你分享,今天我很幸運(yùn)的收到了一份精美的贈品哮针。 在深圳《好女孩大學(xué)優(yōu)雅智慧》的課堂上关面,有一個環(huán)節(jié)是...
    張習(xí)瑤閱讀 445評論 0 0