listFolder SwiftyDropbox v2 - PullRequest
       26

listFolder SwiftyDropbox v2

0 голосов
/ 21 января 2019

Я сейчас пытаюсь интегрировать DropBox в свое приложение. Я мог бы войти и сделать запрос на файл.

Теперь я хочу сохранить весь текущий каталог в классе под названием каталог. этот класс создается экземпляром DirectoryViewModel. Вы можете увидеть пронумерованные распечатки в фрагменте кода, и вывод показывает:

1 2 3 END --- папки: 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!)
            }
        }
    }
}

}

class file{

var pathDisplay: String
var pathLower: String
var name: String

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

}

папка класса { var pathDisplay: String var pathLower: String имя var: String

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

}

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)")
}

}

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()

}

1 Ответ

0 голосов
/ 21 января 2019

Чтобы расширить сказанное Гереоном, обратный вызов response для метода listFolder (и любых других методов вызова Dropbox API в SDK Dropbox SwiftyDropbox ) выполняется асинхронно.

Это означает, что ваш инициализатор Directory может завершиться до срабатывания обратного вызова response.Таким образом, вы должны запускать любой код, который зависит от результата из блока response, только когда этот блок response сработает (например, поместите его в блок response).

...