首页 > 解决方案 > `Thread 1: signal SIGABRT` 转换为字符串时

问题描述

我正在尝试将套接字数据有效负载的结果添加到字符串数组:

override func viewDidLoad() {
    super.viewDidLoad()

    let tableView = UITableView(frame: .zero, style: .plain)
    tableView.translatesAutoresizingMaskIntoConstraints = false
    self.view.addSubview(tableView)
    NSLayoutConstraint.activate([
        self.view.safeAreaLayoutGuide.topAnchor.constraint(equalTo: tableView.topAnchor),
        self.view.safeAreaLayoutGuide.bottomAnchor.constraint(equalTo: tableView.bottomAnchor),
        self.view.leadingAnchor.constraint(equalTo: tableView.leadingAnchor),
        self.view.trailingAnchor.constraint(equalTo: tableView.trailingAnchor),
        ])
    self.tableView = tableView

    self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "UITableViewCell")

    self.tableView.dataSource = self

    let socket = manager.defaultSocket

    socket.on(clientEvent: .connect) {data, ack in
        print("socket connected")
        self.refresh()
    }

    socket.on("request") {data, ack in

        print("data is" , data[0])
        self.items.append(String(data[0] as! String))
        self.tableView.reloadData()

    }

数据有效载荷作为线路接收

print("data is" , data[0])

打印到控制台:

data is (
    "this is a test message"
)

但我不确定如何从data. 线self.items.append(String(data[0] as! String))

返回错误:

Thread 1: signal SIGABRT

也使用

self.items.append(data[0])

返回编译器错误:

Cannot convert value of type 'Any' to expected argument type 'String'

如何添加到items数组并防止和/或转换为 StringThread 1: signal SIGABRT的正确方法是什么?data[0]

如果我硬编码一个字符串并将其添加到数组中:

self.items.append("Test")

项目添加没有错误。

标签: swiftxcode

解决方案


从控制台打印data[0]是一个字符串数组,所以你可以试试

if let arr  = data.first as? [String] , let item = arr.first {
  print("data is" ,item)
  self.items.append(item)
}

上面的代码附加了第一项,由你来附加整个数组

self.items += arr

推荐阅读