プログラムを書こう!

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

SwiftのGoogleDrive APIでファイルをリネームする。

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

目次

  1. はじめに
  2. 前提
  3. ファイルリネーム処理
  4. おわりに

詳解 Swift 第4版

詳解 Swift 第4版

1. はじめに

こんにちは、iOSのエディタアプリPWEditorの開発者の二俣です。
今回はSwiftのGoogleDrive APIでファイルをリネームしてみます。

PWEditorでは、SwiftのGoogleDrive APIを操作するため、

を使用しています。

目次へ

2. 前提

下記の記事を参考にGoogleDrive APIを使用できる状態にしておいてください。

SwiftでGoogleDrive APIを使用する準備を行う。 - プログラムを書こう!
SwiftのGoogleDrive APIで初期化処理を行う。 - プログラムを書こう!
SwiftのGoogleDrive APIでサインインを行う。 - プログラムを書こう!

目次へ

3. ファイルリネーム処理

SwiftのGoogleDrive APIにファイルをリネームするAPIは用意されていないようです。
そのためPWEditorでは、ファイルをコピーして、コピー元ファイルを削除してファイルをリネームすることにしました。
この手順でディレクトリもリネームできます。

ファイルをコピーする手順は paveway.hatenablog.com を参考にしてください。

ファイルを削除する手順は paveway.hatenablog.com を参考にしてください。

ポイントはコピー処理が終わってから削除の処理を行うのではなく、コピー処理のクロージャの中で削除処理を行うことにしています。
これによりユーザからは一連の処理として見えるようになります。

AppDelegate.swift

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    ...
    /// GoogleDriveサービスドライブ
    let googleDriveServiceDrive = GTLRDriveService()
    ....
}

ViewController.swift

import GoogleAPIClientForREST

/**
 GoogleDriveでファイルのリネームを行います。

 - Parameter fileId: ファイルID
 - Parameter fileName: リネーム後のファイル名
 - Parameter dirId: ディレクトリID
 */
func renameFile(_ fileId: String, fileName: String, dirId: String) {
    // 1. 引数のリネーム後のファイル名とディレクトリIDを指定して、ファイル(GTLRDrive_File)オブジェクトを作成します。
    let copyFile = GTLRDrive_File()
    copyFile.name = fileName
    copyFile.parents = [dirId]

    // 2. 1で作成したファイル(GTLRDrive_File)オブジェクトと引数のファイルIDを指定して、クエリオブジェクトを取得します。
    let query = GTLRDriveQuery_FilesCopy.query(withObject: copyFile, fileId: fromId)
    
    // 3. 2で作成したクエリオブジェクトを指定して、GTLRService#executeQueryメソッドを実行し、ファイルをコピーします。
    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    let serviceDrive = appDelegate.googleDriveServiceDrive
    serviceDrive.executeQuery(query, completionHandler: { (ticket: GTLRServiceTicket?, updatedFile: Any?, error: Error?) -> Void in
        if let error = error {
            // 4. エラーの場合、処理を終了します。
            // 必要に応じてエラー処理を行ってください。
            return
        }

        // 5. 元ファイルを削除します。
        self.deleteFile(fileId)
    })
}

/**
 GoogleDriveでファイルを削除します。

 - Parameter fileId: ファイルID
 */
func deleteFile(_ fileId: String) {
    // 6. 引数のファイルIDを指定して、クエリオブジェクトを取得します。
    let query = GTLRDriveQuery_FilesDelete.query(withFileId: fileId)

    // 7. 6で作成したクエリオブジェクトを指定して、GTLRService#executeQueryメソッドを実行し、ファイルを削除します。
    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    let serviceDrive = appDelegate.googleDriveServiceDrive
    serviceDrive.executeQuery(query) { (ticket: GTLRServiceTicket?, updatedFile: Any?, error: Error?) in
        if let error = error {
            // 8. エラーの場合、処理を終了します。
            // 必要に応じてエラー処理を行ってください。
            return
            }

            // 9. 正常終了の場合の処理を記述してください。
        }
    }
}

目次へ

4. おわりに

手順としては
paveway.hatenablog.com
とほぼ同じになります。

今回でPWEditorで使用しているGoogleDrive APIの説明は全て説明しました。

楽しく学べる学研ゼミ!

目次へ