我正在开发一个小型的快速应用程序,以处理一些来自SignalR服务器的数据。我正在使用SignalR-ObjC客户端来接收数据,并且已经设置了事件处理程序来接收数据。
hubConnection.received = { data in
print(data!);
}
这是上面的行打印到控制台的内容:
{
A = (2);
H = SystemHub;
M = ConnectedUserCount;
}
print(type(of: data));
将类型显示为可选<任何> 。
And this is a frame of data received in debug mode
我正在尝试将其转换为字符串以对其进行解析,希望有人可以给我一个有关如何投射/解包的指针?我以为传入的数据是NSDictionary,但无论如何我似乎都无法解包。
答案 0 :(得分:2)
在某种程度上,Objective-C中的id
类型现在映射到Swift中的Any
类型,它描述了任何类型的值,无论是类,枚举,结构还是任何其他值雨燕类型。在这里,Any
是当对象是异构对象时赋予集合的类型。
您可以清楚地看到您的数据是一个字典,您可以按照以下步骤进行访问:
hubConnection.received = { data in
if let dict = data as? [String: Any] { // again any as value can be array or string
print(dict)
}
}
您也可以访问内部值对象。
if let dict = data as? [String: Any],
let valueA = dict["A"] as? [Any],
let valueB = dict["B"] as? String,
let valueC = dict["C"] as? String {
print(valueA)
print(valueB)
print(valueC)
}
as?
确保您的对象符合特定的数据类型,否则它将返回nil。因此写data as? [String: Any]
就是检查数据是否是String
键和Any
值的字典,我们使用Any
,因为它可以是Array
,{{1 }},String
或我们目前不确定的任何其他数据类型。