Watson Assistant в Swift 4 Ошибка при создании - PullRequest
0 голосов
/ 06 января 2019

Я пытаюсь подключить проект iOS, закодированный в Swift, к экземпляру Watson Assistant, который я уже создал. Проблема в том, что я не могу обойти ошибку «Тип закрытия контекста» при компиляции.

Я относительно новичок в Swift, и мне еще предстоит найти решение.

Ошибка возникает в блоке кода, предоставленном самими IBM (вот ссылка: https://console.bluemix.net/docs/swift/machine_learning/conversation.html#before-you-begin). Одна вещь, которую я смог найти, это то, что это, вероятно, результат обновления до Swift 4. Ниже приведена функция это порождает ошибку, точнее, это выражение «response in» после третьего комментария.

func assistantExample() {
    // Assistant credentials
    let username = "shawn.soneja85@gmail.com"
    let password = "Shawn8135!"
    let workspace = "199b1f99-b28c-4b3f-b610-5933328141d5"

    // instantiate service
    let assistant = Assistant(username: username, password: password, version: "2018-03-01")

    // start a conversation
    assistant.message(workspaceID: workspace) { response in
        print("Conversation ID: \(response.context.conversationID!)")
        print("Response: \(response.output.text.joined())")

        // continue assistant
        print("Request: turn the radio on")
        let input = InputData(text: "turn the radio on")
        let request = MessageRequest(input: input, context: response.context)
        assistant.message(workspaceID: workspace, request: request) { response in
            print("Response: \(response.output.text.joined())")
        }
    }
}

Вот сама ошибка:

Контекстный тип замыкания '(RestResponse ?, WatsonError?) -> Void' (aka '(Необязательно>, Необязательный) -> ()') ожидает 2 аргумента, но 1 использовался в теле замыкания

Обновление: Я попытался заменить «ответ» на «(ответ, ошибка)», но это приводит к следующим сообщениям об ошибках: Значение типа 'RestResponse?' не имеет члена 'context' Значение типа 'RestResponse?' не имеет члена 'output' И с «(ошибка, ответ)», это приводит к следующей ошибке: Значение типа 'WatsonError?' (он же необязательный) не имеет члена output Значение типа 'WatsonError?' (он же «Необязательный») не имеет члена «context»

Вот документация по функции .message: первый скриншот второй скриншот

Заранее спасибо за помощь!

Ответы [ 2 ]

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

Было бы полезно, если бы вы дали более подробное описание, например:

  1. Swift-версия, которую вы используете для компиляции вашей цели
  2. Номер строки ошибки

При этом, я думаю, что ваша проблема заключается во вложенном методе .message, я скопировал ваш код выше, но удалил несколько строк, чтобы попытаться прояснить (по крайней мере, то, что я предлагаю), вы, возможно, добавили второй параметр для обратного вызова в первом вызове .message, но забыл сделать это во втором (вложенном) вызове, который вы передаете в request. Таким образом, вы могли добавить второй параметр error в первый вызов, но получили точно такое же сообщение об ошибке для отсутствующего параметра, потому что вы забыли сделать то же самое для вложенного вызова. Надеюсь, это поможет:)

// start a conversation
assistant.message(workspaceID: workspace) { response, error in
    let input = InputData(text: "turn the radio on")
    let request = MessageRequest(input: input, context: response.context)
    assistant.message(workspaceID: workspace, request: request) { response, error in
        print("Response: \(response.output.text.joined())")
    }
}
0 голосов
/ 08 января 2019

RestResponse содержит результат вызова .message в поле с именем result. Чтобы получить доступ к output или context, используйте response.result.output и response.result.context.

...