我正在开发一个小型 swift 应用程序来处理来自 signalR 服务器的一些数据。我正在使用 SignalR-ObjC 客户端接收数据,并且我有一个事件处理程序设置来接收数据。
hubConnection.received = { data in
print(data!);
}
这是上面一行打印到控制台的内容:
{
A = (2);
H = SystemHub;
M = ConnectedUserCount;
}
print(type(of: data));
显示类型为Optional< Any >。
And this is a frame of data received in debug mode
我正在尝试将它放入一个字符串中以对其进行解析,希望有人可以指导我如何转换/解包它?我以为传入的数据是一个 NSDictionary,但我似乎无法解包。
最佳答案
在某种程度上,Objective-C 中的 id
类型现在映射到 Swift 中的 Any
类型,它描述了任何类型的值,无论是类、枚举、结构或任何其他 Swift 类型。在这里,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 作为? [String: Any]
正在检查数据是否是 String
键和 Any
值的字典,我们尽可能使用 Any
可以是 Array
、String
、Number
或我们目前不确定的任何其他数据类型。
关于swift - 在 Swift 中将 Optional<Any> 转换为 NSString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58323350/