談?wù)刼c和swift的區(qū)別

1.Swift和Objective-C的聯(lián)系

Swift和Objective-C共用一套運(yùn)行時(shí)環(huán)境,Swift的類型可以橋接到Objective-C(下面我簡稱OC)灶搜,反之亦然。
其次就是工窍,OC之前積累的很多類庫割卖,在Swift中大部分依然可以直接使用,當(dāng)然患雏,Swift3之后鹏溯,一些語法改變了很多,不過還是有跡可循的淹仑。OC出現(xiàn)過的絕大多數(shù)概念丙挽,比如引用計(jì)數(shù)、ARC匀借、屬性颜阐、協(xié)議、接口吓肋、初始化凳怨、擴(kuò)展類、命名參數(shù)是鬼、匿名函數(shù)等肤舞,在Swift中繼續(xù)有效(可能最多換個(gè)術(shù)語)。Swift大多數(shù)概念與OC一樣均蜜。當(dāng)然Swift也多出了一些新興概念李剖,這些在OC中是沒有的,比如范型囤耳、元組等篙顺。

2. Swift比Objective-C有什么優(yōu)勢

1、Swift容易閱讀紫皇,語法和文件結(jié)構(gòu)簡易化慰安。
2、Swift更易于維護(hù)聪铺,文件分離后結(jié)構(gòu)更清晰化焕。
3牍氛、Swift更加安全嫌褪,它是類型安全的語言。
4、Swift代碼更少扼鞋,簡潔的語法,可以省去大量冗余代碼
5檬果、Swift速度更快泽篮,運(yùn)算性能更高。

3. Swift目前存在的缺點(diǎn)

1谜疤、版本不穩(wěn)定佃延,之前升級Swift3大動刀,苦了好多人
2夷磕、使用人數(shù)比例偏低履肃,目前還是OC為主
3、社區(qū)的開源項(xiàng)目偏少坐桩,畢竟OC獨(dú)大好多年尺棋,很多優(yōu)秀的類庫都不支持Swift,不過這種狀況正在改變绵跷,現(xiàn)在有好多優(yōu)秀的Swift的開源類庫了
4膘螟、公司使用的比例不高,很多公司以穩(wěn)為主碾局,還是在使用OC開發(fā)荆残,很少一些在進(jìn)行混合開發(fā),更少一些是純Swift開發(fā)擦俐。
5脊阴、偶爾開發(fā)中遇到的一些問題,很難查找到相關(guān)資料蚯瞧,這是一個(gè)弊端嘿期。
6、純Swift的運(yùn)行時(shí)和OC有本質(zhì)區(qū)別埋合,一些OC中運(yùn)行時(shí)的強(qiáng)大功能备徐,在純Swift中變無效了。
7甚颂、對于不支持Swift的一些第三方類庫蜜猾,如果非得使用,只能混合編程振诬,利用橋接文件實(shí)現(xiàn)蹭睡。

4. Swift其他功能說明

1 Swift的內(nèi)存管理

Swift使用自動引用計(jì)數(shù)(ARC)來簡化內(nèi)存管理,與OC一致赶么。

2 Swift的可選項(xiàng)類型(Optionals)介紹

Swift引入了可選項(xiàng)類型肩豁,用于處理變量值不存在的情況。Optionals類似于OC中指向nil的指針,但是適用于所有數(shù)據(jù)類型清钥,而非僅僅局限于類琼锋,Optionals相比于OC中的nil指針,更加安全和簡明祟昭,并且也是Swift諸多最強(qiáng)大功能的核心缕坎。

3 Swift中的 !和 篡悟?

這兩個(gè)符號是用來標(biāo)記這個(gè)變量的值是否可選谜叹,!表示可選變量必須保證轉(zhuǎn)換能夠成功恰力,否則報(bào)錯(cuò)叉谜,但定義的變量可以直接使用;踩萎?表示可選變量即使轉(zhuǎn)換不成功也不會報(bào)錯(cuò),變量值為nil很钓,如果轉(zhuǎn)換成功香府,要使用該變量時(shí),后面需要加码倦!進(jìn)行修飾企孩。

4 Swift中范型的簡單說明

范型是用來使代碼能安全工作,swift中的范型可以在函數(shù)數(shù)據(jù)和普通數(shù)據(jù)類型中使用袁稽,例如類勿璃、結(jié)構(gòu)體或枚舉。范型可以解決代碼復(fù)用的問題推汽,

5 Swift的訪問權(quán)限變更

swift新增了兩種訪問權(quán)限补疑,權(quán)限更細(xì)化。具體查看這里:
訪問權(quán)限由大到小依次為:open歹撒,public莲组,internal(默認(rèn)),fileprivate暖夭,private

  • fileprivate

在原有的swift中的 private其實(shí)并不是真正的私有锹杈,如果一個(gè)變量定義為private,在同一個(gè)文件中的其他類依然是可以訪問到的迈着。這個(gè)場景在使用extension的時(shí)候很明顯竭望。

這樣帶來了兩個(gè)問題:
(1)當(dāng)我們標(biāo)記為private時(shí),意為真的私有還是文件內(nèi)可共享呢裕菠?
(2)當(dāng)我們?nèi)绻鈭D為真正的私有時(shí)咬清,必須保證這個(gè)類或者結(jié)構(gòu)體在一個(gè)單獨(dú)的文件里。否則可能同文件里其他的代碼訪問到。

由此枫振,在swift 3中喻圃,新增加了一個(gè) fileprivate來顯式的表明,這個(gè)元素的訪問權(quán)限為文件內(nèi)私有粪滤。

過去的private對應(yīng)現(xiàn)在的fileprivate「模現(xiàn)在的private則是真正的私有,離開了這個(gè)類或者結(jié)構(gòu)體的作用域外面就無法訪問杖小。
所以fileprivate > private .

  • open

open則是彌補(bǔ)public語義上的不足肆汹。

現(xiàn)在的pubic有兩層含義:
(1)這個(gè)元素可以在其他作用域被訪問
(2)這個(gè)元素可以在其他作用域被繼承或者override

繼承是一件危險(xiǎn)的事情。尤其對于一個(gè)framework或者module的設(shè)計(jì)者而言予权。在自身的module內(nèi)昂勉,類或者屬性對于作者而言是清晰的,能否被繼承或者override都是可控的扫腺。但是對于使用它的人岗照,作者有時(shí)會希望傳達(dá)出這個(gè)類或者屬性不應(yīng)該被繼承或者修改。這個(gè)對應(yīng)的就是 final笆环。

final的問題在于在標(biāo)記之后攒至,在任何地方都不能override。而對于lib的設(shè)計(jì)者而言躁劣,希望得到的是在module內(nèi)可以被override迫吐,在被import到其他地方后其他用戶使用的時(shí)候不能被override。

通俗的理解public和open就是:

public:可以被任何人訪問账忘,但其他module中不可以被override和繼承志膀,而在本module內(nèi)可以被override和繼承。
open:可以被任何人使用鳖擒,包括override和繼承溉浙。

  • internal

internal是系統(tǒng)默認(rèn)訪問級別,internal修飾符可寫可不寫败去。

(1)internal訪問級別所修飾的屬性或方法在源代碼所在的整個(gè)模塊都可以訪問放航。
(2)如果是框架或者庫代碼,則在整個(gè)框架內(nèi)部都可以訪問圆裕,框架由外部代碼所引用時(shí)广鳍,則不可以訪問。
(3)如果是App代碼吓妆,也是在整個(gè)App代碼赊时,也是在整個(gè)App內(nèi)部可以訪問。

5. Swift Foundation框架

為了方便使用行拢,Swift的基本類型都可以無縫轉(zhuǎn)換到 Foundation 框架中的對應(yīng)類型祖秒。

因?yàn)?Cocoa 框架所接受和返回的基本數(shù)據(jù)類型都是自身框架內(nèi)的類型,也就是 Foundation 中所定義的像 NSString,NSNumber竭缝,NSArray 等這些東西房维。而脫離 Cocoa 框架進(jìn)行 app 開發(fā)是不可能的事情。因此我們在使用 Swift 開發(fā) app 時(shí)無法避免地需要在 Swift 類型和 Foundation 類型間進(jìn)行轉(zhuǎn)換抬纸。如果需要每次顯式地書寫轉(zhuǎn)換的話咙俩,大概就沒人會喜歡用 Swift 了。還好 Swift 與 Foundation 之間的類型轉(zhuǎn)換是可以自動完成的湿故,這使得通過 Swift 使用 Cocoa 時(shí)順暢了很多阿趁。

而且這個(gè)轉(zhuǎn)換不僅是自動的,而且是雙向的坛猪,而且無論何時(shí)只要有可能脖阵,轉(zhuǎn)換的結(jié)果會更傾向于使用 Swift 類型。也就是說墅茉,只要你不寫明類型是需要 NS 開頭的類型的時(shí)候命黔,你都會得到一個(gè) Swift 類型。

Swift中的類型和OC的類型對應(yīng)關(guān)系

String - NSString
Int, Float, Double, Bool 以及其他與數(shù)字有關(guān)的類型 - NSNumber
Array - NSArray
Dictionary - NSDictionary

6. Swift便捷的函數(shù)式編程

Swift提供了Map就斤、FlatMap纷铣、Filter、Reduce等函數(shù)方法战转,能夠大大方便我們對對象處理。

Map

var results = [1,3,5,7]
let results = values.map ({ (element) -> Int in
    return element * 2
})
//"[2, 6, 10, 14]"

Filter:

var values = [1,3,5,7,9]
let flattenResults = values.filter{ $0 % 3 == 0}
//[3, 9]

Reduce

var values = [1,3,5]
let initialResult = 0
var reduceResult = values.reduce(initialResult, combine: { (tempResult, element) -> Int in
    return tempResult + element
})
print(reduceResult)
//9

7. 其他補(bǔ)充 - swift獨(dú)有

  • 范圍運(yùn)算符
a...b 表示 [a,b] 包括a和b 以躯。 (如3...5  就是范圍取3槐秧,4,5)
a..<b 表示 [a,b) 包括a忧设,不包括b 刁标。 (如3...5  就是范圍取3,4)
常見的如for循環(huán):for i in 0...9{}
  • 獨(dú)有的元組類型

元組(tuples)把多個(gè)值組合成一個(gè)復(fù)合值址晕。元組內(nèi)的值可以使任意類型,并不要求是相同類型

var value = (Int,String) = (x:15,y:"abc")
  • swift中使用let定義常量,var定義變量

使用常量,更加安全,不能夠被修改,在需要對對象進(jìn)行修改的時(shí)候 只能用var修飾.

  • if let 膀懈、 guard let 的用法

縮減代碼量,安全處理數(shù)據(jù)邏輯谨垃。

8. 細(xì)節(jié)使用區(qū)別

  • 1启搂、swift不分.h和.m文件 ,一個(gè)類只有.swift一個(gè)文件刘陶,所以整體的文件數(shù)量比起OC有一定減少胳赌。
  • 2、swift句尾不需要分號 匙隔,除非你想在一行中寫三行代碼就加分號隔開疑苫。
  • 3、swift數(shù)據(jù)類型都會自動判斷 , 只區(qū)分變量var 和常量let
  • 4捍掺、強(qiáng)制類型轉(zhuǎn)換格式不同 OC強(qiáng)轉(zhuǎn):(int)a Swift強(qiáng)轉(zhuǎn):Int(a)
  • 5撼短、關(guān)于BOOL類型更加嚴(yán)格 ,Swift不再是OC的非0就是真挺勿,而是true才是真false才是假
  • 6曲横、swift的 循環(huán)語句中必須加{} 就算只有一行代碼也必須要加
  • 7、swift的switch語句后面可以跟各種數(shù)據(jù)類型了 满钟,如Int胜榔、字符串都行,并且里面不用寫break(OC好像不能字符串)
  • 8湃番、swift if后的括號可以省略: if a>b {}夭织,而OC里 if后面必須寫括號。
  • 9吠撮、swift打印 用print("") 打印變量時(shí)可以 print("(value)")尊惰,不用像OC那樣記很多%@,d%等泥兰。
  • 10弄屡、Swift3的【Any】可以代表任何類型的值,無論是類鞋诗、枚舉膀捷、結(jié)構(gòu)體還是任何其他Swift類型,這個(gè)對應(yīng)OC中的【id】類型削彬。

本文內(nèi)容摘自
作者:路飛_Luck
鏈接:http://www.reibang.com/p/3b19b806867b

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末全庸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子融痛,更是在濱河造成了極大的恐慌壶笼,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雁刷,死亡現(xiàn)場離奇詭異覆劈,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)沛励,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門责语,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人侯勉,你說我怎么就攤上這事鹦筹。” “怎么了址貌?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵铐拐,是天一觀的道長徘键。 經(jīng)常有香客問我,道長遍蟋,這世上最難降的妖魔是什么吹害? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮虚青,結(jié)果婚禮上它呀,老公的妹妹穿的比我還像新娘。我一直安慰自己棒厘,他們只是感情好纵穿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著奢人,像睡著了一般谓媒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上何乎,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天句惯,我揣著相機(jī)與錄音,去河邊找鬼支救。 笑死抢野,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的各墨。 我是一名探鬼主播指孤,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼贬堵!你這毒婦竟也來了邓厕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤扁瓢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后补君,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體引几,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年挽铁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了伟桅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,133評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡叽掘,死狀恐怖楣铁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情更扁,我是刑警寧澤盖腕,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布赫冬,位于F島的核電站,受9級特大地震影響溃列,放射性物質(zhì)發(fā)生泄漏劲厌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一听隐、第九天 我趴在偏房一處隱蔽的房頂上張望补鼻。 院中可真熱鬧,春花似錦雅任、人聲如沸风范。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽硼婿。三九已至,卻和暖如春成玫,著一層夾襖步出監(jiān)牢的瞬間加酵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工哭当, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留猪腕,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓钦勘,卻偏偏與公主長得像眼虱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子氏堤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評論 2 355

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