【Swift UI】ファイルの読み込み

概要

テキストファイルを読み込む。読み込んだ文字列を画面に表示する。

コード

import SwiftUI

struct ContentView: View {
  var body: some View {
    VStack {
      Text(getFileStr())
    }
  }
}

func getFileStr() -> String {
  guard let fileURL = Bundle.main.url(forResource: "ファイル名", withExtension: "拡張子"),
    let fileContents = try? String(contentsOf: fileURL, encoding: .utf8) else { // 複数指定のguard let
      return "読み込み失敗"
    }
    return fileContents
}

guard

条件を満たさない場合の処理を記述する構文。
エラーの確認や値がnil(オプショナル型変数にnilが含まれている場合にelseに飛ぶ)でないかのチェックをする。

gurad 条件式 else {
  処理
  returnまたはbreakまたはthrow
}

複数指定したい場合は条件をカンマ区切りで指定。

guard let

代入する値がnilの場合はfalseの処理が行われる。

複数指定したい場合は条件をカンマ区切りで指定

guard let thisStr = str, thisStr.characters.cout >= 5 else {
    
}

Bundleクラス

アプリのバンドルディレクトリにアクセスするためのクラス。
バンドルディレクトリには画像やサウンドファイル、ストーリーボードなどのリソース、テキストファイル、設定ファイルなどが含まれている。
Bundleクラスを使用するにはタイププロパティとして定義されているmainからアクセスする。

Bundle | Apple Developer Documentation

urlメソッド

func url {
  forResource name: String?,
  withExtension ext: String?
} -> URL?
  • name

リソースファイル名。nilを指定した場合はextに指定した拡張子に最初に一致したファイルを返す。

  • ext

リソースファイルの拡張子。空文字またはnilの場合は、拡張子なしのnameに一致したファイルを返す。

  • 戻り値

ファイルのURL。ファイルが見つからなかった場合はnilを返す。

url(forResource:withExtension:) | Apple Developer Documentation

initメソッド

与えられたURLのデータを読み込んでStringを作成する。

init(
  contentsOf url: URL,
  encoding eng: String.Encoding
) throws

init(contentsOf:encoding:) | Apple Developer Documentation