Есть ли способ вернуть значение идентификатора из этой функции? SWIFT IOS - PullRequest
0 голосов
/ 23 марта 2020
func runQuery() -> (String){
    appSyncClient?.fetch(query: ListTodosQuery(), cachePolicy: .returnCacheDataAndFetch) {(result, error) in
        if error != nil {
            print(error?.localizedDescription ?? "")
            return
        }
        print("Query complete.")
        result?.data?.listTodos?.items!.forEach { print(($0?.name)! + " " + ($0?.description)!) }
    }
    return the string
}

Это учебный код AWS AMPLIFY. Он только распечатывает результат из БД ($0?.name, etc...).

Однако я хочу вернуть значение $0?.name.

Когда я пытаюсь назначить или установить переменную для вывода параметр вне функции.

Он либо ничего не возвращает, либо не позволяет мне вернуть значение.

Есть идеи?

1 Ответ

0 голосов
/ 23 марта 2020

fetch метод выполняется асинхронно. Асинхронная функция не может вернуть результат при возврате функции.

Здесь я объединяю $0?.name s и использую пробел в качестве разделителей.

func runQuery(completionHandler: @escaping (String) -> Void) {
    appSyncClient?.fetch(query: ListTodosQuery(), cachePolicy: .returnCacheDataAndFetch) {(result, error) in
        if error != nil {
            print(error?.localizedDescription ?? "")
            completionHandler("")
            return
        }
        print("Query complete.")
        var sampleString = ""
        result?.data?.listTodos?.items!.forEach {
            print(($0?.name)! + " " + ($0?.description)!)
            sampleString += $0?.name + " "
        }
        completionHandler(sampleString)
    }
}

func callQuery() {
    runQuery(completionHandler: { (result) in
        // do what you want
        print(result)
    })
}
...