swift3 錯誤和異常處理

本文是 swifter-tips 的筆記

異常 和 錯誤

異常

異常往往是由程序員的錯誤導致的app無法繼續(xù)運行震缭。
例如:

  • 向一個無法響應某個消息的NSObject 對象發(fā)送了消息出嘹,會得到 NSInvalidArgumentException 的異常野揪,并告訴
    程序員 ““unrecognized selector sent to instance”
  • 程序員使用一個超過數(shù)組元素數(shù)量的下標來試圖訪問 NSArray 的元素時,會得到 NSRangeException .

這種錯誤所導致的程序無法運行的問題是在開發(fā)階段就全部解決的惠啄,而不應當出現(xiàn)在上架APP中奖地。

錯誤

  • 由 NSError 代表的錯誤更多的指那些 “合理的”和悦,用戶在使用app中可能遇到的情況。
    例如:
  • 登錄時候用戶名密碼驗證后不匹配
  • 試圖從某個文件中讀取數(shù)據(jù)生成 NSData 對象時發(fā)生了問題(比如文件被意外修改了)等等

但 NSError 的使用方式其實在變相的鼓勵開發(fā)者忽略錯誤榜揖。
例如:

[data writeToFile: path options: options error: nil];

在swift2.0 中 勾哩,帶有 NSError 指針作為參數(shù)的API 都被改成了可以拋出異常的形式。

open func write(toFile path: String, 
    options writeOptionsMask: NSData.WritingOptions) throws

使用方法為:

do {
    try d.write(toFile: "Hello", options: [])
} catch let error as NSError {
    print ("Error: \(error.domain)")
}

try 和 throws

try

  • try举哟!標識強制執(zhí)行思劳,代表你確定知道這次調(diào)用不會拋出異常,如果調(diào)用中出現(xiàn)了移倉妨猩,程序崩潰潜叛。
  • try? 返回一個Optional值,如果運行成功壶硅,沒有拋出錯誤威兜,會返回一個包含這條語句的返回值,否者返回nil

throws

  • 在一個可以throw的方法里庐椒,我們永遠不應該返回一個Optional的值椒舵。
  • 因為結(jié)合 try? 使用的話约谈,這個 Optional 值將再次包裝一層 Optional 笔宿,這種雙重的 Optional 值 非常容易出現(xiàn) 錯誤犁钟。也十分迷惑。

rethrows

  • 和 throws 做的事情沒有太多不同泼橘,都是標記了一個方法應該拋出錯誤
  • rethrows 一般用在參數(shù)中包含有可以 throws 的方法的高階函數(shù)中涝动,表示它既可以接受普通函數(shù),也可以接受一個能throw的函數(shù)作為參數(shù)炬灭。
  • 可以將 rethrows 看做 throws 的 “子類”醋粟, rethrows 的方法可以用來重載那些被標記為 throws的方法或者參數(shù)〉0埽或用來滿足被標記為 throws 的協(xié)議昔穴。
  • 如果不知道怎么用 :
    • 記住: 在要 throws 另一個 throws 時提前,應該將前者 改為 rethrows 吗货。
  • 這樣在不失靈活性的同時保證了 代碼的 可讀性和 準確性。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末狈网,一起剝皮案震驚了整個濱河市宙搬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拓哺,老刑警劉巖勇垛,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異士鸥,居然都是意外死亡闲孤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門烤礁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讼积,“玉大人,你說我怎么就攤上這事脚仔∏谥冢” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵鲤脏,是天一觀的道長们颜。 經(jīng)常有香客問我,道長猎醇,這世上最難降的妖魔是什么窥突? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮姑食,結(jié)果婚禮上波岛,老公的妹妹穿的比我還像新娘。我一直安慰自己音半,他們只是感情好则拷,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布贡蓖。 她就那樣靜靜地躺著,像睡著了一般煌茬。 火紅的嫁衣襯著肌膚如雪斥铺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天坛善,我揣著相機與錄音晾蜘,去河邊找鬼。 笑死眠屎,一個胖子當著我的面吹牛剔交,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播改衩,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼岖常,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了葫督?” 一聲冷哼從身側(cè)響起竭鞍,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎橄镜,沒想到半個月后偎快,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡洽胶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年晒夹,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片姊氓。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡惋戏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出他膳,到底是詐尸還是另有隱情,我是刑警寧澤绒窑,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布棕孙,位于F島的核電站,受9級特大地震影響些膨,放射性物質(zhì)發(fā)生泄漏蟀俊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一订雾、第九天 我趴在偏房一處隱蔽的房頂上張望肢预。 院中可真熱鬧,春花似錦洼哎、人聲如沸烫映。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锭沟。三九已至抽兆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間族淮,已是汗流浹背辫红。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留祝辣,地道東北人贴妻。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像蝙斜,于是被迫代替她去往敵國和親名惩。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理乍炉,服務發(fā)現(xiàn)绢片,斷路器,智...
    卡卡羅2017閱讀 134,657評論 18 139
  • 1. Java基礎部分 基礎部分的順序:基本語法岛琼,類相關(guān)的語法底循,內(nèi)部類的語法,繼承相關(guān)的語法槐瑞,異常的語法熙涤,線程的語...
    子非魚_t_閱讀 31,632評論 18 399
  • 相對自己說真的好糟糕,雖然這不是自己想要的生活困檩,但一點辦法也沒有祠挫,只能這樣將就下去。 加油悼沿,自己等舔,父親不在了,有兩...
    久愛jiajia閱讀 76評論 0 0
  • 第一次遇到《了不起的蓋茨比》這部小說是在大學的美國文學課上糟趾,老師帶領(lǐng)著我們讀完了英文原著慌植。 第二次相遇是因小李子主...
    綠水蕩漾景天然閱讀 644評論 1 4
  • 新版本默認并沒有開啟這個功能,需要單獨開啟
    panw3i閱讀 297評論 0 0