我有一个服务文件,它获取数据并将其发送到后端。是否可以将推送数据从服务推送到视图并让 UI 像 @State 一样获取更改(不像全局变量)。
@EnviornmentObject 不工作只读全局变量不工作,因为不通知 UI
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 sliderValue: Float = 6 {
willSet {
print(newValue)
didChange.send(self)
}
}
static let sharedInstance = Socket()
init() {
socket.on(clientEvent: .connect) {data, ack in
print("socket connected")
self.sliderValue = 8
}
}
func establishConnection() {
socket.connect()
}
func closeConnection() {
socket.disconnect()
}
}
主页视图:
import SwiftUI
struct HomeView : View {
@EnvironmentObject var socketData: Socket
var body: some View {
VStack {
Text("Hello World")
Slider(value: $socketData.sliderValue, from: 0.0, through: 10.0)
Text(String(socketData.sliderValue))
}
}
}