您好,登錄后才能下訂單哦!
這篇“swift錯誤處理do catch try try!使用的方法是什么”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“swift錯誤處理do catch try try!使用的方法是什么”文章吧。
在swift中 如果我們要定義一個表示錯誤類型非常簡單,只要遵循Error協(xié)議就可以了,我們通常用枚舉或者結(jié)構(gòu)體來表示錯誤類型,枚舉可能用的多些,因為他能更直觀的表達當(dāng)前錯誤類型的每種錯誤細節(jié)。
// // AboutError.swift // learn_swiftUi // // Created by liuan on 2020/9/4. // Copyright ? 2020 liuan. All rights reserved. // import Foundation enum VendingMachingError:Error{ case invalideSelection case insufficientFunds(coinsNeeded:Int) case outOfStock }
函數(shù)、方法和初始化器都可以拋出錯誤。需要在參數(shù)列表后面,返回值加throws 關(guān)鍵字。
簡化版
func canThrowErrors() throws -> String
// // AboutError.swift // learn_swiftUi // // Created by liuan on 2020/9/4. // Copyright ? 2020 liuan. All rights reserved. // import Foundation enum VendingMachingError:Error{ case invalideSelection case insufficientFunds(coinsNeeded:Int) case outOfStock } struct Item { var price: Int var count: Int } class VendingMathine{ var inventory=[ "Candy bar":Item(price: 12, count: 7), "Chips":Item(price: 10, count: 4), "Pretzels":Item(price: 7, count: 11), ] var coinsDeposited = 0 func vend(itemNaamed name:String) throws{ guard let item = inventory[name] else{ throw VendingMachingError.invalideSelection } guard item.count > 0 else{ throw VendingMachingError.outOfStock } guard item.price <= coinsDeposited else{ throw VendingMachingError.insufficientFunds(coinsNeeded: item.price - coinsDeposited) } coinsDeposited -= item.price var newItem = item newItem.count -= 1 inventory[name]=newItem print("Dispensing \(name)") } } let vm=VendingMathine() vm.coinsDeposited=2 try vm.vend(itemNaamed: "Pretzels")
拋出異常
Playground execution terminated: An error was thrown and was not caught: ? VendingMachingError ? insufficientFunds : 1 element - coinsNeeded : 5
在Swift中我們使用do-catch塊對錯誤進行捕獲,當(dāng)我們在調(diào)用一個throws聲名的函數(shù)或方法時,我們必須把調(diào)用語句放在do語句塊中,同時do語句塊后面緊接著使用catch語句塊
do里面執(zhí)行調(diào)用語句
后面跟著catch 第一種錯誤 在第一種錯誤里面做處理
第二種錯誤需要符合一定的條件
然后做錯誤處理
第三種是沒有捕獲到的錯誤 然后在第三個語句里面做處理
如果你確信一個函數(shù)或者方法不會拋出錯誤,可以使用try! 來中斷錯誤的傳播,但是如果錯誤真的發(fā)生了。你會得到一個運行時錯誤
// // AboutError.swift // learn_swiftUi // // Created by liuan on 2020/9/4. // Copyright ? 2020 liuan. All rights reserved. // import Foundation let photo = try! 5/0
warning: BlackMyPlayground.playground:10:19: warning: no calls to throwing functions occur within 'try' expression let photo = try! 5/0 ^ warning: BlackMyPlayground.playground:10:19: warning: no calls to throwing functions occur within 'try' expression let photo = try! 5/0 ^ error: BlackMyPlayground.playground:10:19: error: division by zero let photo = try! 5/0 ^
defer關(guān)鍵字:defer block 例的代碼會在函數(shù)return之前執(zhí)行,無論函數(shù)是從哪個分之return的,還有throw,還是自然而然走到最后一樣。
// // File.swift // learn_swiftUi // // Created by liuan on 2020/9/4. // Copyright ? 2020 liuan. All rights reserved. // import Foundation func processFile(fileName: String)throws{ defer{ print("JIESHU") } print("KAISHI ") }
以上就是關(guān)于“swift錯誤處理do catch try try!使用的方法是什么”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。