Reactive Swift использует живые данные из API - нужен базовый пример - PullRequest
0 голосов
/ 10 февраля 2019

Я новичок в RxSwift и ищу базовый пример того, как печатать в консоли потоковую передачу данных из бэкэнда.У меня есть бэкэнд, который передает некоторые фиктивные данные каждую 1 секунду, я могу видеть их с помощью запроса скручивания, и я хочу иметь возможность наблюдать, подписываться и распечатывать их в консоли автоматически, пожалуйста, помогите!

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

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
    }
}
0 голосов
/ 10 февраля 2019

Я предполагаю, что вы открываете сокетное соединение с вашим сервером для получения данных в реальном времени.Вы можете использовать RxWebSocket для обработки этого потока данных.Есть примеры в документации / readme для API.

...