如何将 WKScriptMessage.body 转换为结构?
How do I convert a WKScriptMessage.body to a struct?
我设置了 WKScriptMessageHandler
函数 userContentController(WKUserContentController, didReceive: WKScriptMessage)
来处理 JavaScript 发送到本机应用程序的消息。我提前知道消息正文将始终返回相同的字段。如何将声明为 Any
的 WKScriptMessage.body
转换为结构?
例如,安全类型转换为字典如何?
let body = WKScriptMessage.body
guard let dictionary = body as? [String: String] else { return }
或者作为一个选项,您可以将正文作为 json 字符串发送并使用 codable 对其进行序列化。
struct SomeStruct: Codable {
let id: String
}
guard let bodyString = WKScriptMessage.body as? String,
let bodyData = bodyString.data(using: .utf8) else { fatalError() }
let bodyStruct = try? JSONDecoder().decode(SomeStruct.self, from: bodyData)
在 SwiftUI 中 message.body 是字符串对象。您可以像这样转换字典中的正文:
if let bodyString = message.body as? String {
let data = Data(bodyString.utf8)
do {
if let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] {
guard let body = json["body"] as? [String: Any] else {
return
}
//use body object
}
} catch let error as NSError {
print("Failed to load: \(error.localizedDescription)")
}
}
我设置了 WKScriptMessageHandler
函数 userContentController(WKUserContentController, didReceive: WKScriptMessage)
来处理 JavaScript 发送到本机应用程序的消息。我提前知道消息正文将始终返回相同的字段。如何将声明为 Any
的 WKScriptMessage.body
转换为结构?
例如,安全类型转换为字典如何?
let body = WKScriptMessage.body
guard let dictionary = body as? [String: String] else { return }
或者作为一个选项,您可以将正文作为 json 字符串发送并使用 codable 对其进行序列化。
struct SomeStruct: Codable {
let id: String
}
guard let bodyString = WKScriptMessage.body as? String,
let bodyData = bodyString.data(using: .utf8) else { fatalError() }
let bodyStruct = try? JSONDecoder().decode(SomeStruct.self, from: bodyData)
在 SwiftUI 中 message.body 是字符串对象。您可以像这样转换字典中的正文:
if let bodyString = message.body as? String {
let data = Data(bodyString.utf8)
do {
if let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] {
guard let body = json["body"] as? [String: Any] else {
return
}
//use body object
}
} catch let error as NSError {
print("Failed to load: \(error.localizedDescription)")
}
}