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