【发布时间】:2018-02-07 19:36:13
【问题描述】:
我一直在尝试制作一个基本的 swift 4 应用程序,该应用程序连接到我的节点服务器并运行我为该应用程序的 Web 版本所拥有的事件。使用下面的代码,它可以顺利地无缝连接到服务器,但另一方面,我显然不能在这个闭包之外发送到套接字,因为套接字是用viewDidLoad() 定义的。
如果我尝试将套接字声明移到这个函数之外,它会给我这个错误:
“不能在属性初始化器中使用实例成员'manager';属性初始化器在'self'可用之前运行”。
我试图查看许多不同的文档,但没有成功。
@IBOutlet weak var messagesBody: UITextView!
@IBOutlet weak var newMessageInput: UITextField!
@IBOutlet weak var newMessageSubmit: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
let manager = SocketManager(socketURL: URL(string: "http://localhost:3000/chat.html?name=developer&room=test")!, config: [.log(true), .compress])
let socket = manager.defaultSocket
socket.connect()
newMessageSubmit.addTarget(self, action: #selector(sendNewMessage), for: .touchUpInside)
}
@objc func sendNewMessage() {
let newMessageContent = newMessageInput.text!
print("Sending message..." + newMessageContent)
// socket.emit("createMessage", newMessageContent)
// right here ^^^^^
}
【问题讨论】: