91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

swift錯誤處理do?catch?try?try!使用的方法是什么

發布時間:2023-03-16 11:12:34 來源:億速云 閱讀:146 作者:iii 欄目:開發技術

這篇“swift錯誤處理do catch try try!使用的方法是什么”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“swift錯誤處理do catch try try!使用的方法是什么”文章吧。

在swift中 如果我們要定義一個表示錯誤類型非常簡單,只要遵循Error協議就可以了,我們通常用枚舉或者結構體來表示錯誤類型,枚舉可能用的多些,因為他能更直觀的表達當前錯誤類型的每種錯誤細節。

//
//  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
}

函數、方法和初始化器都可以拋出錯誤。需要在參數列表后面,返回值加throws 關鍵字。

簡化版

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塊對錯誤進行捕獲,當我們在調用一個throws聲名的函數或方法時,我們必須把調用語句放在do語句塊中,同時do語句塊后面緊接著使用catch語句塊

swift錯誤處理do?catch?try?try!使用的方法是什么

do里面執行調用語句

后面跟著catch 第一種錯誤 在第一種錯誤里面做處理

第二種錯誤需要符合一定的條件

然后做錯誤處理

第三種是沒有捕獲到的錯誤 然后在第三個語句里面做處理

swift錯誤處理do?catch?try?try!使用的方法是什么

如果你確信一個函數或者方法不會拋出錯誤,可以使用try! 來中斷錯誤的傳播,但是如果錯誤真的發生了。你會得到一個運行時錯誤

//
//  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關鍵字:defer block 例的代碼會在函數return之前執行,無論函數是從哪個分之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 ")
 
}

以上就是關于“swift錯誤處理do catch try try!使用的方法是什么”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

砚山县| 偏关县| 崇礼县| 宜阳县| 信丰县| 绍兴市| 昌黎县| 靖边县| 青龙| 阿勒泰市| 齐齐哈尔市| 塘沽区| 泰州市| 曲松县| 博爱县| 巩义市| 报价| 宁陵县| 札达县| 犍为县| 墨江| 铁岭市| 河南省| 宜州市| 晋宁县| 景东| 夏河县| 商南县| 云龙县| 嘉鱼县| 临武县| 大安市| 扶绥县| 织金县| 高唐县| 青田县| 如皋市| 西贡区| 五华县| 隆尧县| 中牟县|