SwiftUI | do/try/catchの使い方

SwiftUI

SwiftUIのdo/try/catchの使い方を説明する。

結論

do節にtry文を記述する。catch節にtry文がエラーを返した場合の処理を記述する。

具体例

do節が実行される例

任意のテキストファイルを準備する。

ワタシは ゆうしゃ ヨシヒコ。

SwiftUIで上記ファイルを読み込みprint()するというコードを記述し実行する。

import SwiftUI

struct ContentView: View {
    var body: some View {
        Button("ボタンをタップ") {
            test1()
        }
        .buttonStyle(.borderedProminent)
    }
    
    func test1() {
        let ファイルパス = "/Users/yoshihiko/Desktop/yoshihiko.txt"
        do {
            print(try String(contentsOfFile: ファイルパス))
        } catch {
            print("エラーが発生しました。");
        }
    }
}

このコードはtry文がエラーを返さないためdo節が実行されファイルの中身がprint()出力される。

ワタシは ゆうしゃ ヨシヒコ。

catch節が実行される例

ファイルのパスを入れ忘れたとする。

import SwiftUI

struct ContentView: View {
    var body: some View {
        Button("ボタンをタップ") {
            test1()
        }
        .buttonStyle(.borderedProminent)
    }
    
    func test1() {
        let ファイルパス = ""  // ? ファイルパスを入れ忘れたとする
        do {
            print(try String(contentsOfFile: "ファイルパス"))
        } catch {
            print("エラーが発生しました。");
        }
    }
}

このコードはtry文がエラーを返すためcatch節が実行され下記がprint()出力される。

エラーが発生しました。

catch let 変数名 と記述することでエラー内容を変数に格納できる。

import SwiftUI

struct ContentView: View {
    var body: some View {
        Button("ボタンをタップ") {
            test1()
        }
        .buttonStyle(.borderedProminent)
    }
    
    func test1() {
        let ファイルパス = ""
        do {
            print(try String(contentsOfFile: "ファイルパス"))
        } catch let エラー内容 {                    // ? catch let 変数名
            print("エラーが発生しました。")
            print(エラー内容)                       // ? 変数の値をprint
        }
    }
}

実行するとエラー内容が表示される。

エラーが発生しました。
Error Domain=NSCocoaErrorDomain Code=258 "The item couldn’t be opened because the file name “” is invalid." UserInfo={NSFilePath=}

まとめ

SwiftUIのdo/try/catchの使い方を説明した。

try?やtry!でエラー処理する方法もある。下記記事参照。

コメント

タイトルとURLをコピーしました