Невозможно использовать тогда на ios swift promisekit - PullRequest
0 голосов
/ 24 апреля 2018

Я создал обещание, которое получает некоторые данные из API и возвращает их. Теперь я застрял после получения данных JSON, которые мне нужны, чтобы сохранить их в памяти устройства (область). После вызова обещания при попытке получить сообщение об ошибке «Не удается преобразовать значение типа« (Any) -> Void »в ожидаемый тип аргумента« (_) -> _ »). Но когда я пытаюсь сделать это работает отлично. Но мне нужно использовать затем, чтобы сохранить данные в области.

Следующий подход работает нормально

Translator().translators().done { data -> Void in
            print(data[0].name)
            }.catch { error in
                print(error)
        }

Но следующий подход не удался

Translator().translators().then() { data -> Void in
            print(data)
            }.catch() {
                (e: Error) in
                print(e)
        }

Выше выдает ошибку, которая говорит

Cannot convert value of type '(Any) -> Void' to expected argument type '(_) -> _'

и следующий подход дает еще одну похожую ошибку

Translator().translators().then() {
            (data: [Translator]) -> Void in
            print(data[0].name)
            }.catch() {
                (e: Error) in
                print(e)
        }

сообщение об ошибке:

Cannot convert value of type '([Translator]) -> Void' to expected argument type '([Translator]) -> _'

Обещание, которое я создал:

func translators() -> Promise<[Translator]> {
        return firstly {
            Alamofire.request("http://192.168.0.107:3000/translatdors", method: .get).responseData()
            }.map {
                try JSONDecoder().decode([Translator].self, from: $0.data)
        }
    }

Изображение моего кода и ошибки enter image description here

1 Ответ

0 голосов
/ 24 апреля 2018

Вы должны вернуть promise, когда делаете .then, потому что до .done вы еще не закончили. Я не вижу проблем в сохранении данных области в .done, поскольку у вашего метода нет возвращаемого типа.

Если вы все еще хотите использовать .then, это можно сделать следующим образом.

Translator().translators().then({ data -> Promise<[Translator]> in
            return Promise.value(data)
            }).done({ data in
            // Save to realm
           }).catch({ error in
              print(error.localizedDescription)
           })
...