Swift 从任何类型转换到任何其他类型都会失败

Swift 从任何类型转换到任何其他类型都会失败,swift,ably-realtime,Swift,Ably Realtime,API返回一个类型为Any的变量。我打印的时候是这样的 { "sender" : "Kira", "created" : "08.05.2018", "text" : "Cncncm" } 我尝试使用SwiftyJSON像这样强制转换它let mydata=JSON(data),但失败了。我尝试使用Swift 4解码技术,但也失败了。我试着这样做让myData=data作为?字典,但它再次失败 我不知道在这里该做什么。有什么提示或解决方案吗?您可以像这样解析它,因为它是一个json

API返回一个类型为
Any
的变量。我打印的时候是这样的

{
  "sender" : "Kira",
  "created" : "08.05.2018",
  "text" : "Cncncm"
}
我尝试使用
SwiftyJSON
像这样强制转换它
let mydata=JSON(data)
,但失败了。我尝试使用Swift 4解码技术,但也失败了。我试着这样做
让myData=data作为?字典
,但它再次失败


我不知道在这里该做什么。有什么提示或解决方案吗?

您可以像这样解析它,因为它是一个json字符串

let trd = yourVar as? String

if let data = trd?.data(using: String.Encoding.utf8) {

   do {
           var content = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as! [String:String]

           print(content)

      } 
      catch let error as NSError {

           print(error)
     }
}

最后,有机会展示一个
可编码的
协议隐藏的宝石。请在操场上跑步:

import Cocoa

let jsonData = """
    {
      "sender" : "Kira",
      "created" : "08.05.2018",
      "text" : "Cncncm"
    }
    """.data(using: .utf8)!

struct SenderText: Codable {
    let sender: String
    let created: Date
    let text: String
}

let dayFormatter = DateFormatter()
dayFormatter.dateFormat = "dd.MM.yyyy"
let date = dayFormatter.date(from:"08.05.2018")
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .formatted(dayFormatter)

do {
    let sendText = try decoder.decode(SenderText.self, from: jsonData)
    print(sendText)
} catch {
    print(error)
}
定义如此复杂的解析器将一个凌乱的JSON字符串映射到您最喜欢的
struct
是多么容易,这种优雅的定义几乎不会让我感到惊讶。不管你的日期格式看起来有多奇怪,在这个过程中,它离被解析几乎不超过3行

关于强制转换,您应该注意:在Swift中,就像在大多数面向对象语言中一样,只有当(并且仅当)某个东西在一开始就已经是其他东西时(但这些知识已经丢失在某处),您才能将它强制转换为其他东西。由于您的
字符串
只是一个
字符串
(可能是以
任何
为伪装),因此您无法将其转换为其他任何内容。然而,
Codable
协议为您提供了从
字符串
数据
进行
解码
的绝好方法。这一过程不应被误认为是演员阵容,即使看起来基本相同。它是从一个简单的
数据
创建和初始化另一个结构更合适的对象,您可能从您选择的普通web服务中获得该数据


到目前为止很好,至少在我的书中是这样。

String
?什么API?文件上怎么说?您可以使用
类型(of:)
来确定变量的实际值它是异常的
字符串
。真是一个facepalm。如果结果类型应该是数组或字典,请停止建议
.allowFragments
。删除
选项
参数。转换到
n错误的桥接是冗余的。只要抓住{
就足够了。