反应式 Swift 使用来自 API 的实时数据 - 需要基本示例

Posted

技术标签:

【中文标题】反应式 Swift 使用来自 API 的实时数据 - 需要基本示例【英文标题】:Reactive Swift consume live data from API - need basic example 【发布时间】:2019-02-10 14:26:46 【问题描述】:

我是 RxSwift 的新手,我正在寻找一个基本示例,说明如何在控制台中打印来自后端的实时数据流。我有一个后端每 1 秒传输一些虚拟数据,我可以通过 curl 请求看到它,我希望能够在控制台中自动观察和订阅并打印出来,请帮忙!

【问题讨论】:

【参考方案1】:

我假设您正在打开与服务器的套接字连接以接收实时数据。您可以使用RxWebSocket 来处理此数据流。 API 的文档/自述文件中有示例。

【讨论】:

谢谢,我明白了。在做了一些研究之后,我来到了github.com/daltoniam/Starscream/tree/master/examples/SimpleTest/… 并看到了它的实际效果。【参考方案2】:

https://github.com/daltoniam/Starscream/tree/master/examples/SimpleTest/SimpleTest

import UIKit
import Starscream

class ViewController: UIViewController, WebSocketDelegate 
var socket: WebSocket!

@IBOutlet weak var label: UILabel!
@IBOutlet weak var textField: UITextField!

override func viewDidLoad() 
    super.viewDidLoad()
    var request = URLRequest(url: URL(string: "wss://echo.websocket.org")!)
    request.timeoutInterval = 5
    socket = WebSocket(request: request)
    socket.delegate = self
    socket.connect()


// MARK: Websocket Delegate Methods.

func websocketDidConnect(socket: WebSocketClient) 
    print("websocket is connected")


func websocketDidDisconnect(socket: WebSocketClient, error: Error?) 
    if let e = error as? WSError 
        print("websocket is disconnected: \(e.message)")
     else if let e = error 
        print("websocket is disconnected: \(e.localizedDescription)")
     else 
        print("websocket disconnected")
    


func websocketDidReceiveMessage(socket: WebSocketClient, text: String) 
    self.label.text = text
    print("Received text: \(text)")


func websocketDidReceiveData(socket: WebSocketClient, data: Data) 
    print("Received data: \(data.count)")


// MARK: Write Text Action

@IBAction func send(_ sender: UIButton) 
    socket.write(string: "Hello \(textField.text!)")


// MARK: Disconnect Action

@IBAction func disconnect(_ sender: UIBarButtonItem) 
    if socket.isConnected 
        sender.title = "Connect"
        socket.disconnect()
     else 
        sender.title = "Disconnect"
        socket.connect()
    




extension URL 
    init(staticString string: StaticString) 
        guard let url = URL(string: "\(string)") else 
            preconditionFailure("Invalid static URL string: \(string)")
        

        self = url
    

【讨论】:

以上是关于反应式 Swift 使用来自 API 的实时数据 - 需要基本示例的主要内容,如果未能解决你的问题,请参考以下文章

如何在反应中显示来自api的数据

flutter - 来自 REST API 的实时流数据

Swift Firestore 来自查询的自定义对象,同时使用 snapshotListener 监听实时更新

如何在 Swift 中重新加载来自外部 API 的折线图数据?

来自 JSON Api 的 Swift 请求数据

使用来自先前输入的数据反应表单