swift - `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")
项目添加没有错误。
解决方案
从控制台打印data[0]
是一个字符串数组,所以你可以试试
if let arr = data.first as? [String] , let item = arr.first {
print("data is" ,item)
self.items.append(item)
}
上面的代码附加了第一项,由你来附加整个数组
self.items += arr
推荐阅读
- python - 如何在计算期间并根据该计算的先前结果更新 Excel 中的值?
- c# - 为什么 Razor TextBoxFor(带日期注释)不显示现有的日期时间值?
- javascript - ejs中的动态按钮填充表单域
- python - 如何在 Ansible 2.7 或 2.8 中循环遍历多级 dict 或 yaml?
- c - 未显示链接列表
- bixby - 如果计划未经验证怎么办
- java - Windows 区域设置如何影响 javafx 应用程序
- web-scraping - 在 Python3.6.5 中请求获取 SSL 证书错误
- c# - 当我按下 UI 按钮时,如何让我的播放器跳跃?(统一)
- python - 如何在 RaspBerry Pi 3 (Raspbian (Debian)) 中自动启动 python 脚本?