swift - 在 Swift 中将 Optional<Any> 转换为 NSString

标签 swift signalr

我正在开发一个小型 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可以是 ArrayStringNumber 或我们目前不确定的任何其他数据类型。

关于swift - 在 Swift 中将 Optional<Any> 转换为 NSString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58323350/

相关文章:

swift - UIActivityIndi​​cator 需要几秒钟才能被关闭

asp.net-core - 如何将响应发送到组列表并排除 SignalR Core 中的某些连接 ID?

swift - $0.1、$0.0 等在 Swift 中是什么意思?

swift - 在守卫中创建非可选的以测试守卫条件

swift - 以编程方式处理容器 View 约束问题

azure - 使用 Azure Redis 缓存服务横向扩展 Signal R

c# - 客户端何时适合与 SignalR 服务重新协商?

swift - 核心蓝牙 : CBPeripheral has no member setnotifyValue iOS 10. 0

SignalR:如何避免意外页面刷新

asp.net - 在 Ubuntu 上更新到 mono 4.0.1 后出现问题