プログラムを書こう!

実務や自作アプリ開発で習得した役に立つソフトウェア技術情報を発信するブログ

SwiftのBox APIでファイルを作成する。

この記事は2018年10月07日に投稿しました。

目次

  1. はじめに
  2. 前提
  3. ファイル作成処理
  4. おわりに

1. はじめに

こんにちは、iOSのエディタアプリPWEditorの開発者の二俣です。
今回はSwiftのBox APIでファイルを作成する手順の紹介です。

目次へ

2. 前提

iOSアプリからBox APIにアクセスするため、Box iOS SDKライブラリを使用します。
以下の記事を参考に、Box APIを使用する準備をしておいてください。

paveway.hatenablog.com

目次へ

3. ファイル作成処理

SwiftのBox APIでファイルを作成するAPIは用意されていません。
代わりに空のファイルデータをアップロードしてファイルを作成します。
そのためfileUploadRequestToFolderメソッドを使用しします。

以下がファイルを作成する手順です。 この手順は、Box iOS SDKライブラリのドキュメントFilesUpload a Fileを参考にしました。

  1. Boxのクライアントオブジェクトを取得します。
  2. クライアントオブジェクトのfileUploadRequestToFolderメソッドで、ファイル作成リクエストを生成します。
    fileUploadRequestToFolderメソッドの引数には、

    • ファイルを作成するディレクトリのID
    • ファイルデータ(今回は空データ)
    • ファイル名

    を指定します。

  3. ファイル作成リクエストのperformメソッドを実行し、ファイルを作成します。 ファイル作成の場合、進捗状況を通知するクロージャーと、作成した結果のクロージャの2つが用意されています。 ネットワークアクセスしますので、PWEditorではファイル作成中は、処理中ダイアログを表示しています。
  4. エラーがあれば、作成した結果のクロージャーの引数errorが設定されます。
    作成したファイルは作成した結果のクロージャーの引数fileが設定されます。

実装例

import BOXContentSDK

/**
 ファイルを作成します。
 
 - Parameter parentId: ファイルを作成するディレクトリのID
 - Parameter fileName: ファイル名
 */
func createFile(_ parentId: String, fileName: String) {
    // 1. クライアントオブジェクトを取得します。
    guard let client = BoxContentClient.default() else {
        // クライアントオブジェ久我取得できない場合、処理を終了します。
        // 必要に応じてエラー処理を行ってください。
        return
    }
    
    // 空データを生成します。
    let data = Data()
    
    // 2. ファイル作成リクエストを取得します。
    guard let request = client.fileUploadRequestToFolder(withID: parentId, from: data, fileName: fileName) else {
        return
    }
    
    // 3. ファイルを作成します。
    request.perform(progress: { (totalBytesTransferred: Int64, totalBytesExpectedToTransfer: Int64) -> Void in
        // 処理中に呼び出されます。
        // 必要に応じて、進捗状況の表示等の処理を行ってください。

    }, completion: { (file: BOXFile?, error: Error?) -> Void in
        // ファイル作成処理が完了した時に呼び出されます。
        
        // 4. エラーかチェックします。
        if let error = error {
            // エラーの場合、処理を終了します。
            // 必要に応じてエラー処理してください。
            return
        }
        
        // 4. ファイルが作成されたかチェックします。
        guard let _ = files else {
            // ファイルが作成されていない場合、処理を終了します。
            // 必要に応じてエラー処理してください。
            return
        }

        // 以降正常終了した場合の処理を記述してください。
    })
}

目次へ

4. おわりに

ファイル作成の場合、進捗状況が取得できるクロージャーも用意されています。
PWEditorでは子のクロージャーは利用しませんでしたが、よく考えられていると思います。

エンジニアのためのQ&Aサイト【teratail】

目次へ