《從零開始學Swift》學習筆記(Day 55)——使用try?和try!區別
原創文章,歡迎轉載。轉載請註明:關東昇的部落格
在使用try進行錯誤處理的時候,經常會看到try後面跟有問號(?)或感嘆號(!),他們有什麼區別呢?
1.使用try?
try?會將錯誤轉換為可選值,當呼叫try?+函式或方法語句時候,如果函式或方法丟擲錯誤,程式不會發崩潰,而返回一個nil,如果沒有丟擲錯誤則返回可選值。
示例程式碼如下:
//查詢所有資料方法
func findAll() throws -> [Note] {
guard listData.count > 0 else {
//丟擲"沒有資料"錯誤。
throw DAOError.NoData
}
return listData
}
let datas = try? findAll()
print(datas)
上述程式碼中let datas = try? findAll()語句中使用了try?,datas是一個可選值,本例中輸出nil。使用了try?語句沒有必要使用do-catch語句將其包裹起來。
2.使用try!
使用try!可以打破錯誤傳播鏈條。錯誤丟擲後傳播給它的呼叫者,這樣就形成了一個傳播鏈條,但有的時候確實不想讓錯誤傳播下去,可以使用try!語句。
修改上述程式碼如下:
//查詢所有資料方法
func findAll() throws -> [Note] {
guard listData.count > 0 else {
//丟擲"沒有資料"錯誤。
throw DAOError.NoData
}
return listData
}
func printNotes() {
let datas = try! findAll() ①
for note in datas {
print("date : \(note.date!) - content: \(note.content!)")
}
}
printNotes()
②
程式碼printNotes()函式沒有宣告丟擲錯誤,在呼叫它的時候不需要try關鍵字,錯誤傳播鏈條在printNotes()函式內被打破了。
程式碼將try dao.findAll()語句改為try! findAll(),在try後面加了感嘆號(!),這樣編譯器就不會要求printNotes()方法宣告丟擲錯誤了,try!打破了錯誤傳播鏈條,但是如果真的發生錯誤就出現執行期錯誤,導致程式的崩潰。
所以使用try!打破錯誤傳播鏈條時,應該確保程式不會發生錯誤。
歡迎關注關東昇新浪微博@tony_關東昇。 關注智捷課堂微信公共平臺,瞭解最新技術文章、圖書、教程資訊
更多精品iOS、Cocos、移動設計課程請關注智捷課堂官方網站:http://www.zhijieketang.com 智捷課堂論壇網站:http://51work6.com/forum.php
相關文章
- python Scrapy 從零開始學習筆記(一)Python筆記
- python Scrapy 從零開始學習筆記(二)Python筆記
- PHP從零開始系列二(學習筆記):序言PHP筆記
- PHP從零開始系列一(學習筆記):前言PHP筆記
- 從零開始學Electron筆記(六)筆記
- 從零開始學Electron筆記(七)筆記
- 從零開始學Electron筆記(二)筆記
- 從零開始學Electron筆記(四)筆記
- 從零開始學Electron筆記(五)筆記
- 從零開始學Electron筆記(一)筆記
- 從零開始學Electron筆記(三)筆記
- 從零開始學五筆(七):折區字根
- 從零開始學五筆(六):捺區字根
- 從零開始學五筆(三):橫區字根
- 從零開始學五筆(四):豎區字根
- 從零開始學五筆(五):撇區字根
- 從零開始JAVA資料結構學習筆記(一)Java資料結構筆記
- 從零開始學習機器學習機器學習
- 從零開始學習laravelLaravel
- 從零開始學習KafkaKafka
- 從零開始機器學習機器學習
- Java之try-catch和throws的區別Java
- 從零開始學五筆(一):概述
- 《Python深度學習從零開始學》簡介Python深度學習
- 從零開始學習C++(0)C++
- 從零開始學習 Go ——安裝Go
- 從零開始機器學習-03機器學習
- 從零開始機器學習--4機器學習
- 從零開始機器學習--05機器學習
- swift學習筆記《1》Swift筆記
- swift學習筆記《4》Swift筆記
- 從零開始的Unity個人學習日記(二)Unity
- this和super的區別和應用 學習筆記筆記
- 從零開始學機器學習——入門NLP機器學習
- 從零開始學機器學習——瞭解聚類機器學習聚類
- 《谷歌JAX深度學習從零開始學》簡介谷歌深度學習
- 從零開始學PythonPython
- swift學習筆記《2》-swift語法Swift筆記
- 從頭開始的Java學習Day05Java