Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
listFolder SwiftHydropbox v2_Swift_Uitableview_Tableview_Dropbox Api_Swiftydropbox - Fatal编程技术网

listFolder SwiftHydropbox v2

listFolder SwiftHydropbox v2,swift,uitableview,tableview,dropbox-api,swiftydropbox,Swift,Uitableview,Tableview,Dropbox Api,Swiftydropbox,我目前正在尝试将DropBox集成到我的应用程序中。我可以登录并提出文件请求 现在我想将当前的整个目录保存在一个名为directory的类中。此类由DirectoryViewModel实例化。您可以在代码段中看到带编号的打印,输出显示: 1 2. 3. 结束---文件夹:0文件:0 计数项目:0 4. 文件夹数:4:文件数:1 所以顺序是错误的。。。它应该是3-4端 我不知道如何解决这个问题。。。如果有人能帮我弄明白,那就太棒了 class Directory{ var files =

我目前正在尝试将DropBox集成到我的应用程序中。我可以登录并提出文件请求

现在我想将当前的整个目录保存在一个名为directory的类中。此类由DirectoryViewModel实例化。您可以在代码段中看到带编号的打印,输出显示:

1 2. 3. 结束---文件夹:0文件:0 计数项目:0 4. 文件夹数:4:文件数:1

所以顺序是错误的。。。它应该是3-4端 我不知道如何解决这个问题。。。如果有人能帮我弄明白,那就太棒了

class Directory{    
var files  = [file]()
var folders  = [folder]()

init()
{
    print("2")
    if let client = DropboxClientsManager.authorizedClient {
        print("3")
        // List folder
        client.files.listFolder(path: "").response { response, error in
            print("4")
            if let result = response {
                print("Folder contents:")
                for entry in result.entries {
                    if (self.isFile(testStr: entry.pathLower!)){
                        print("File detected")
                        self.files.append(file(pathDisplay: entry.pathDisplay!, pathLower: entry.pathLower!, name: entry.name))
                    } else {
                        print("Folder detected")
                        self.folders.append(folder(pathDisplay: entry.pathDisplay!, pathLower: entry.pathLower!, name: entry.name))
                    }
                }
                print("folders count: \(self.folders.count) : files: \(self.files.count)")
            } else {
                print(error!)
            }
        }
    }
}
}

}

类文件夹{ 变量路径显示:字符串 var-pathLower:String 变量名称:String

init(pathDisplay: String, pathLower: String, name: String) {
    self.pathDisplay = pathDisplay
    self.pathLower = pathLower
    self.name = name
}
}

}

DirectoryViewModel在符合协议UITableViewDataSource的表视图中充当数据源

extension DirectoryViewModel: UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
    return items.count
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return items[section].rowCount
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let item = items[indexPath.section]

    switch item.type{

    case .file:
        if let cell = tableView.dequeueReusableCell(withIdentifier: FileCell.identifier, for: indexPath) as? FileCell {
            cell.item = item

            return cell
        }
    case .folder:
        if let cell = tableView.dequeueReusableCell(withIdentifier: FolderCell.identifier, for: indexPath) as? FolderCell {
            print("folder added name: ")

            cell.item = item
            return cell
        }

    }
    return UITableViewCell()

}

为了扩展Gereon所说的内容,listFolder方法(以及中的任何其他Dropbox API调用方法)的
响应
回调异步运行


这意味着您的
目录
初始值设定项可能在
响应
回调触发之前完成。因此,在
response
块触发后(例如,将其放入
response
块中),您应该只运行依赖于
response
块结果的任何代码。

您的
目录
初始值设定项在异步回调运行之前返回。这是一个特点。
class DirectoryViewModel: NSObject {

var items = [FileFolderItem]()

override init() {
super.init()
    print("1")
     let directory = Directory()
    print("END --- folders: \(directory.folders.count)  files: \(directory.files.count)")
        for folder in directory.folders{
            print("fo")
            self.items.append(FolderItem(pathDisplay: folder.pathDisplay, pathLower: folder.pathLower, name: folder.name))
        }

        for file in directory.files{
            print("fi")

            self.items.append(FolderItem(pathDisplay: file.pathDisplay, pathLower: file.pathLower, name: file.name))
        }
        print("COUNT ITEMS: \(items.count)")
}
extension DirectoryViewModel: UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
    return items.count
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return items[section].rowCount
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let item = items[indexPath.section]

    switch item.type{

    case .file:
        if let cell = tableView.dequeueReusableCell(withIdentifier: FileCell.identifier, for: indexPath) as? FileCell {
            cell.item = item

            return cell
        }
    case .folder:
        if let cell = tableView.dequeueReusableCell(withIdentifier: FolderCell.identifier, for: indexPath) as? FolderCell {
            print("folder added name: ")

            cell.item = item
            return cell
        }

    }
    return UITableViewCell()

}