【问题标题】:How to fix 'Cannot convert value of type '[Any]' to type 'String' in coercion' error in swift如何在swift中修复'无法将'[Any]'类型的值转换为强制类型'String''错误
【发布时间】:2019-11-28 13:08:52
【问题描述】:

我使用 socket.io websocket 从后端获取数据,并使用 environmentObject 将其推送到 View(SwiftUI),但问题是我无法获取数据,因为它是 Any 类型

我已经尝试使用“guard var data = socketData else { return }”,但是出现了这个错误: 条件绑定的初始化程序必须具有 Optional 类型,而不是 '[Any]'

import SwiftUI
import SocketIO
import Combine

let manager = SocketManager(socketURL: URL(string: "http://localhost:30000/ios")!, config: [.log(true), .compress])
let socket = manager.defaultSocket

class Socket: BindableObject {
    let didChange = PassthroughSubject<Socket,Never>()
    var days: String = "Loading..." {
        didSet {
            didChange.send(self)
        }
    }
    static let sharedInstance = Socket()
    init() {

        socket.on(clientEvent: .connect) {data, ack in
            print("socket connected")
        }
        socket.on("dailyWeather") {data, ack in
            print("just a test")
            var data = data as String //Here is the current error
            /*do {
                let decoder = JSONDecoder()
                decoder.keyDecodingStrategy = .convertFromSnakeCase
                let city = try decoder.decode(day.self, from: data)
                self.weatherData.city = city.name
            } catch {
                print(error)
            }*/
            self.days = "cur"
        }
    }


    func establishConnection() {
        socket.connect()
    }

    func closeConnection() {
        socket.disconnect()
    }
}

错误: 无法将类型“[Any]”的值强制转换为类型“String”

【问题讨论】:

  • data 是一个与String 无关的something 数组。编译器和我们一样无知。
  • 如果让 str = data as?字符串 {}
  • 它说 if let str = data as? String {} 总是会失败,当我得到数据 [0] 时,我无法在 SwiftUI 文本中显示它

标签: swift websocket socket.io swiftui


【解决方案1】:

找到解决办法:

var arr = data[0]
yourString: String = (arr as AnyObject).description

【讨论】:

  • yourString = "\(data[0])"怎么样
  • 抛出错误:'Any'类型的值没有下标
  • 你知道如何将数据([Any])转换为数据,然后转换为 json 吗?
猜你喜欢
  • 1970-01-01
  • 2019-04-23
  • 2021-03-08
  • 1970-01-01
  • 2020-02-04
  • 2021-06-18
  • 1970-01-01
  • 2020-04-17
  • 1970-01-01
相关资源
最近更新 更多