2

我设置了WKScriptMessageHandler函数userContentController(WKUserContentController, didReceive: WKScriptMessage)来处理发送到本机应用程序的 JavaScript 消息。我提前知道消息正文将始终返回相同的字段。如何将WKScriptMessage.body声明为Any结构的 , 转换?

4

2 回答 2

4

例如,字典的安全类型转换怎么样?

let body = WKScriptMessage.body
guard let dictionary = body as? [String: String] else { return }

或者作为一个选项,您可以将正文作为 json 字符串发送并使用可编码将其序列化。

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)
于 2020-11-24T20:00:48.960 回答
0

在 SwiftUI 中 message.body 是 String 对象。您可以像这样在字典中转换正文:

            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)")
            }
        }
于 2021-05-19T18:36:29.397 回答