プログラムを書こう!

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

SwiftのBox APIでディレクトリをコピーする。

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

目次

  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ディレクトリをコピーするには、folderCopyRequestメソッドを使用します。
ディレクトリをコピーする場合、配下のディレクトリやファイルもコピーされます。

ファイルはこのメソッドでコピーできず、別のメソッドでコピーします。

以下がディレクトリをコピーする手順です。 この手順はドキュメントに記載がなかったため、調べながら実装しました。

  1. Boxのクライアントオブジェクトを取得します。
  2. クライアントオブジェクトのfolderCopyRequestメソッドで、ディレクトリコピーリクエストを生成します。
    folderCopyRequestメソッドの引数には、

    を指定します。

  3. ディレクトリコピーリクエストのperformメソッドを実行し、ディレクトリをコピーします。 コピーした結果はクロージャで返却されます。 ネットワークアクセスしますので、PWEditorではディレクトリコピー中は、処理中ダイアログを表示しています。
  4. エラーがあれば、クロージャーの引数errorが設定されます。
    コピーしたディレクトリはクロージャーの引数folderに設定されます。

実装例

import BOXContentSDK

/**
 ディレクトリをコピーします。
 
 - Parameter dirId: コピー元のディレクトリのID
 - Parameter parentId: コピー先のディレクトリのID
 */
func copyFile(_ dirId: String, parentId: String) {
    // 1. クライアントオブジェクトを取得します。
    guard let client = BoxContentClient.default() else {
        // クライアントオブジェ久我取得できない場合、処理を終了します。
        // 必要に応じてエラー処理を行ってください。
        return
    }
    
    // 2. ディレクトリコピーリクエストを取得します。
    guard let request = client.folderCopyRequest(withID: dirId, destinationFolderId: parentId) else {
        return
    }
    
    // 3. ディレクトリをコピーします。
    request.perform(completion: { (folder: BOXFolder?, error: Error?) -> Void in
        // 4. エラーかチェックします。
        if let error = error {
            // エラーの場合、処理を終了します。
            // 必要に応じてエラー処理してください。
            return
        }

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

目次へ

4. おわりに

ディレクトリのコピーは、ファイルのコピーとメソッド名が異なるだけで、ほとんど同じです。

お仕事決まれば全額キャッシュバック!転職特化型Ruby実践研修【ポテパンキャンプ】

目次へ