Ios 如何在Google Drive API(Swift 5)中禁用文件夹递归

Ios 如何在Google Drive API(Swift 5)中禁用文件夹递归,ios,swift,google-drive-api,Ios,Swift,Google Drive Api,在我的应用程序中,我使用Google Drive API。我获取文件列表并将其加载到TableView。但在TableView中,我看到根目录中的文件和文件夹以及子文件夹中的文件和文件夹。但只有在点击相应的行时,我才需要导航到子文件夹中的文件。如何禁用递归?我应该如何在didSelectRow函数的子文件夹中实现转换? 谢谢你的帮助 ... var unreformedFileList: [AnyObject] = [] var fileListTicket: GTLRServiceTicket

在我的应用程序中,我使用Google Drive API。我获取文件列表并将其加载到TableView。但在TableView中,我看到根目录中的文件和文件夹以及子文件夹中的文件和文件夹。但只有在点击相应的行时,我才需要导航到子文件夹中的文件。如何禁用递归?我应该如何在
didSelectRow
函数的子文件夹中实现转换? 谢谢你的帮助

...
var unreformedFileList: [AnyObject] = []
var fileListTicket: GTLRServiceTicket?
...
private lazy var driveService: GTLRDriveService = {
        let service = GTLRDriveService()
        if let user = GlobalEntitie.Variable.googleUser {
        service.authorizer = user.authentication.fetcherAuthorizer()
        }
        service.shouldFetchNextPages = true
        service.isRetryEnabled = true
        return service
    }()
...
var files: [FileModelProtocol] {
        guard let files = unreformedFileList as? [GTLRDrive_File] else { return [] }
        return files.map { GoogleDriveFileModel($0) }
    }
...
func fetchFileList(path: String?, _ completion: @escaping () -> Void) {
        let query = GTLRDriveQuery_FilesList.query()
        query.fields = "kind,nextPageToken,files(mimeType,id,kind,name,webViewLink,thumbnailLink,trashed)"

        fileListTicket = driveService.executeQuery(query,
                                                   completionHandler: { [weak self] (_, resultObject, error) in
                                                    
                                                    if let error = error {
                                                        debugPrint("driveService.executeQuery error: \(error.localizedDescription)")
                                                        return
                                                    }
                                                    guard let self = self,
                                                          let fileList = resultObject as? GTLRDrive_FileList,
                                                          let unreformedFileList = fileList.files else { return }
                                                    self.unreformedFileList = []
                                                for file in unreformedFileList {
                                                    
                                                    if file.mimeType == "application/vnd.google-apps.folder" {
                                                        self.unreformedFileList.insert(file, at: 0)
                                                    } else {
                                                        if file.mimeType == "audio/mpeg" ||
                                                            file.mimeType == "audio/x-wav" ||
                                                            file.mimeType == "audio/aac" {
                                                            self.unreformedFileList.append(file)
                                                        }
                                                    }
                                                }
                                                    self.fileListTicket = nil

                                                    completion()
        })
    }
解决方案 在Google Drive API v3中,为了列出特定文件夹/子文件夹中的文件,必须在API调用中将文件夹文件ID传递给q查询参数

使用q参数,您可以使用这些参数过滤
list
方法的输出

然后,您可以按如下方式列出查询
列表
端点的文件夹内容:

q="driveFolderID"+in+parents
参考文献
Swift 5的解决方案:

在函数
fetchFileList:
中,我必须使用变量
folderID
,其中存储当前文件夹ID:

...
query.q = "'\(folderID)' in parents"
...
但当我第一次获得文件列表时,我必须使用:

folderID = "root"
显示根文件夹的内容。 然后,当我想转到一个子文件夹时,我必须使用它的文件夹ID


在什么时候更改变量
folderID
您可以考虑自己。这与这个问题无关。我只想说,我在创建一个新的TableViewController时对其进行了更改,在该控制器中,我在
didSelectRow
函数中转到子文件夹时会显示一个文件列表。

谢谢您的回答,但是现在如何禁用递归?您必须将输出过滤到
根目录中的文件和文件夹中。从那里,您可以使用获取的文件夹ID在
didSelectRow
处理程序上生成下一个请求。@vyacheslavbakinkski如果答案解决了您的问题,您应该接受它,以帮助其他用户找到解决方案: