swift 錯(cuò)誤處理do catch try try!使用詳解
在swift中 如果我們要定義一個(gè)表示錯(cuò)誤類型非常簡(jiǎn)單,只要遵循Error協(xié)議就可以了,我們通常用枚舉或者結(jié)構(gòu)體來(lái)表示錯(cuò)誤類型,枚舉可能用的多些,因?yàn)樗芨庇^的表達(dá)當(dāng)前錯(cuò)誤類型的每種錯(cuò)誤細(xì)節(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ù)、方法和初始化器都可以拋出錯(cuò)誤。需要在參數(shù)列表后面,返回值加throws 關(guān)鍵字。
簡(jiǎ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塊對(duì)錯(cuò)誤進(jìn)行捕獲,當(dāng)我們?cè)谡{(diào)用一個(gè)throws聲名的函數(shù)或方法時(shí),我們必須把調(diào)用語(yǔ)句放在do語(yǔ)句塊中,同時(shí)do語(yǔ)句塊后面緊接著使用catch語(yǔ)句塊
do里面執(zhí)行調(diào)用語(yǔ)句
后面跟著catch 第一種錯(cuò)誤 在第一種錯(cuò)誤里面做處理
第二種錯(cuò)誤需要符合一定的條件
然后做錯(cuò)誤處理
第三種是沒(méi)有捕獲到的錯(cuò)誤 然后在第三個(gè)語(yǔ)句里面做處理
如果你確信一個(gè)函數(shù)或者方法不會(huì)拋出錯(cuò)誤,可以使用try! 來(lái)中斷錯(cuò)誤的傳播,但是如果錯(cuò)誤真的發(fā)生了。你會(huì)得到一個(gè)運(yùn)行時(shí)錯(cuò)誤
// // 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 例的代碼會(huì)在函數(shù)return之前執(zhí)行,無(wú)論函數(shù)是從哪個(gè)分之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 錯(cuò)誤處理do catch try try!使用詳解的文章就介紹到這了,更多相關(guān)swift 錯(cuò)誤處理do catch try try!內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Swift之for循環(huán)的基礎(chǔ)使用學(xué)習(xí)
這篇文章主要為大家介紹了Swift之for循環(huán)的基礎(chǔ)學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06Swift用final關(guān)鍵字來(lái)防止重寫
final關(guān)鍵字在大多數(shù)的編程語(yǔ)言中都存在,表示不允許對(duì)其修飾的內(nèi)容進(jìn)行繼承或者重新操作。下面通過(guò)實(shí)例代碼給大家介紹swift用final關(guān)鍵字來(lái)防止重寫2016-12-12Swift 如何讓ScrollView滾動(dòng)到具體某個(gè)位置
這篇文章主要介紹了Swift 如何讓ScrollView滾動(dòng)到具體某個(gè)位置,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07Swift中Optional值的鏈?zhǔn)秸{(diào)用學(xué)習(xí)筆記
這篇文章主要介紹了Swift中Optional值的鏈?zhǔn)秸{(diào)用學(xué)習(xí)筆記,Optional鏈?zhǔn)荢wift入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-07-07在 Swift 中測(cè)試 UIAlertController的方法
這篇文章主要介紹了在 Swift 中測(cè)試 UIAlertController的方法的,需要的朋友可以參考下2015-10-10詳談swift內(nèi)存管理中的引用計(jì)數(shù)
下面小編就為大家?guī)?lái)一篇詳談swift內(nèi)存管理中的引用計(jì)數(shù)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09swift在IOS應(yīng)用圖標(biāo)上添加提醒個(gè)數(shù)的方法
本文是通過(guò)swift語(yǔ)言實(shí)現(xiàn)在應(yīng)用圖標(biāo)右上角添加消息個(gè)數(shù)提醒的功能,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看下吧2016-08-08