swiftを使用してwebsocketのデータを取得し、UITableView(node.jsサーバー)に入力します

Xcodeでwebsocketを操作するための関連ガイドが見つかりませんでした。私の経験を紹介します。初心者の助けになるといいのですが、彼は私のような検索にあまり時間をかけません。



websocket経由で接続するには、SocketIOClientSwiftを使用します



こちらからダウンロードできます。



そこへのインストールも原則的に説明されていますが、タンク内で簡単な方法があることを伝える人のために、ソースフォルダーからプロジェクトにファイルを追加するだけです。



この例では、node.jsで実行されるテクニカルサポートシステムからチケットを受け取ります



チケットの配列を作成します(これまでは空です):



var arrayOfTickets:[String] = []
      
      





ボタンまたはブート時に、この例ではブート時にデータを取得できます。



  override func viewDidLoad() { super.viewDidLoad() let hostUrl = NSURL(string:"http://IP__:")! //    let tokenSDK = "  " //    let socket = SocketIOClient(socketURL: hostUrl, options: ["log": false, "reconnects": true, "reconnectAttempts": 1, "reconnectWait": 1, "connectParams": ["token":tokenSDK]]) //      socket.on("connect") {data,ack in let hejka = [""] //   ( ) let paginav = [""] //   2 ( ) socket.emitWithAck("_", "", hejka, paginav)(timeoutAfter: 0) //     {data in let dataTickets = data[1]["result"] as! NSArray //  json   let howMuchTickets = dataTickets.valueForKey("name") for (var i=0; i < howMuchTickets.count; i++){ let ticketName = dataTickets[i].valueForKey("name") as? String self.arrayOfTickets.append(ticketName!) //    } } } socket.connect()
      
      





テーブル内のセルを生成するために必要な量を検討します。



  override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return arrayOfTickets.count }
      
      





データを表示します(この例では、カスタムセル、その作成方法は私の投稿の本質ではありませんが、質問がある場合は書きます)。



  override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { // dequeue the cell from our storyboard let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! CustomTableViewCell // if the cell has a text label, set it to the model that is corresponding to the row in array cell.ticketName?.text = arrayOfTickets[indexPath.row] // return cell so that Table View knows what to draw in each row return cell }
      
      





気をつけてください、私たちが知っているように、要求は非同期的に行われ、このコードが実行されると、何も表示されません。



表示するには、tableview関数を呼び出して、データをリロードする、つまり1行追加するように指示する必要があります。



  override func viewDidLoad() { super.viewDidLoad() let hostUrl = NSURL(string:"http://IP__:")! //    let tokenSDK = "  " //    let socket = SocketIOClient(socketURL: hostUrl, options: ["log": false, "reconnects": true, "reconnectAttempts": 1, "reconnectWait": 1, "connectParams": ["token":tokenSDK]]) //      socket.on("connect") {data,ack in let hejka = [""] //   ( ) let paginav = [""] //   2 ( ) socket.emitWithAck("_", "", hejka, paginav)(timeoutAfter: 0) //     {data in let dataTickets = data[1]["result"] as! NSArray let howMuchTickets = dataTickets.valueForKey("name") for (var i=0; i < howMuchTickets.count; i++){ let ticketName = dataTickets[i].valueForKey("name") as? String self.arrayOfTickets.append(ticketName!) // //    self.tableView.reloadData() //    } } } socket.connect()
      
      





質問がある場合、またはより良く/速く/もっと美しく書く方法を知っている場合、このガイドが役立つことを願っています。



All Articles