如何修复 'Cannot convert value of type '[Any]' to type 'String' in coercion' in swift 错误
How to fix 'Cannot convert value of type '[Any]' to type 'String' in coercion' error in swift
我使用 socket.io websocket 从后端获取数据,并使用 environmentObject 将其推送到 View(SwiftUI),但问题是我无法获取数据,因为它是类型任意
我已经尝试使用 "guard var data = socketData else { return }" 但是出现了这个错误:
条件绑定的初始化程序必须具有可选类型,而不是“[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' 强制转换
得到解决方案:
var arr = data[0]
yourString: String = (arr as AnyObject).description
我使用 socket.io websocket 从后端获取数据,并使用 environmentObject 将其推送到 View(SwiftUI),但问题是我无法获取数据,因为它是类型任意
我已经尝试使用 "guard var data = socketData else { return }" 但是出现了这个错误: 条件绑定的初始化程序必须具有可选类型,而不是“[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' 强制转换
得到解决方案:
var arr = data[0]
yourString: String = (arr as AnyObject).description