swift5で下記のようなコードで実行したところ、コンソールにはJSONらしきデータが表示されたのですが、そのデータを取り出そうとするとnilが返されます。
swift5
1import UIKit 2import Foundation 3import SwiftyJSON 4 5extension URLSessionWebSocketTask.Message { 6 var prettyPrintedJSONString: NSString? { 7 switch self { 8 case .string(let text): 9 guard let object = try? JSONSerialization.jsonObject(with: text.data(using: .utf8)!, options: []), 10 let data = try? JSONSerialization.data(withJSONObject: object, options: [.prettyPrinted]), 11 let prettyPrintedString = String(data: data, encoding: String.Encoding(rawValue: String.Encoding.utf8.rawValue)) else { return nil } 12 return prettyPrintedString as NSString 13 default: 14 return nil 15 } 16 } 17} 18 19 20 21class ViewController: UIViewController { 22 23 override func viewDidLoad() { 24 super.viewDidLoad() 25 26 getmessage() 27 28 } 29 30 func getmessage() { 31 32 let url = URL(string: "wss://www.bitmex.com/realtime")! 33 34 let urlSession = URLSession(configuration: .default) 35 let webSocketTask = urlSession.webSocketTask(with: url) 36 webSocketTask.resume() 37 38 39 webSocketTask.receive { result in 40 switch result { 41 case .failure(let error): 42 print(error) 43 case .success(let message): 44 45 print("message : (message.prettyPrintedJSONString!)") 46 47 let jsondata = JSON(message) 48 49 print("jsondata : (jsondata["info"].string)") 50 51 } 52 } 53 } 54} 55 56
responce
1message : { 2 "limit" : { 3 "remaining" : 39 4 }, 5 "info" : "Welcome to the BitMEX Realtime API.", 6 "timestamp" : "2020-02-29T06:59:52.631Z", 7 "docs" : "https://www.bitmex.com/app/wsAPI", 8 "version" : "2020-02-25T22:10:40.000Z" 9} 10 11jsondata : nil
messageではきちんとデータを取得できていると思うのですが、色々やってみてもnilが帰ってきてしまいます。"Welcome to the BitMEX Realtime API." という文字列を取得したいです。
よろしくお願いいたします。
環境
Xcode Version 11.3.1
Swift 5
使用ライブラリ SwiftyJSON
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/03 01:26