Swift 4 中的 Watson Assistant 生成错误
Watson Assistant in Swift 4 Producing Error
我正在尝试将编码为 Swift 的 iOS 项目连接到我已经创建的 Watson Assistant 实例。问题是,我无法克服编译时的 "Contextual Closure type" 错误。
我是 Swift 的新手,我还没有找到解决方案。
错误出现在IBM自己提供的代码块中(这里是link: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”(又名“(Optional>, Optional) -> ()”)需要 2 个参数,但在闭包主体中使用了 1 个
更新:
我已尝试将 "response" 替换为“(响应,错误)”,但这会导致以下错误消息:
'RestResponse?' 类型的值没有成员 'context'
'RestResponse?' 类型的值没有成员 'output'
对于“(错误,响应)”,它会导致以下错误:
'WatsonError?' 类型的值(又名 'Optional')没有成员 'output'
'WatsonError?' 类型的值(又名 'Optional')没有成员 'context'
这里是关于 .message 函数的文档:
first screenshot
second screenshot
在此先感谢您的帮助!
RestResponse
在名为 result
的字段中包含 .message
调用的结果。因此,要访问 output
或 context
,请使用 response.result.output
和 response.result.context
。
如果您提供更多描述,如:
,将会很有帮助
- Swift 您用来编译目标的版本
- 错误的行号
话虽这么说,我认为你的问题出在嵌套的 .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())")
}
}
我正在尝试将编码为 Swift 的 iOS 项目连接到我已经创建的 Watson Assistant 实例。问题是,我无法克服编译时的 "Contextual Closure type" 错误。
我是 Swift 的新手,我还没有找到解决方案。
错误出现在IBM自己提供的代码块中(这里是link: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”(又名“(Optional>, Optional) -> ()”)需要 2 个参数,但在闭包主体中使用了 1 个
更新: 我已尝试将 "response" 替换为“(响应,错误)”,但这会导致以下错误消息: 'RestResponse?' 类型的值没有成员 'context' 'RestResponse?' 类型的值没有成员 'output' 对于“(错误,响应)”,它会导致以下错误: 'WatsonError?' 类型的值(又名 'Optional')没有成员 'output' 'WatsonError?' 类型的值(又名 'Optional')没有成员 'context'
这里是关于 .message 函数的文档: first screenshot second screenshot
在此先感谢您的帮助!
RestResponse
在名为 result
的字段中包含 .message
调用的结果。因此,要访问 output
或 context
,请使用 response.result.output
和 response.result.context
。
如果您提供更多描述,如:
,将会很有帮助- Swift 您用来编译目标的版本
- 错误的行号
话虽这么说,我认为你的问题出在嵌套的 .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())")
}
}