我正在学习&使用swift开发ios应用程序。我的应用程序中有2个选项卡,所以我有2个视图控制器。我需要连接套接字服务器。但是在哪个文件中?
第一个标签显示对话列表,第二个标签是聊天界面。用户正在从第二个标签发送消息。如果有人向该用户发送消息,我需要在第一个标签中显示此消息。
我需要连接套接字服务器但是在哪个文件中?我的意思是示例:当消息到达此用户时,我需要将其保存到数据库并在第二个选项卡中显示用户。是否查看控制器文件是否适用于此情况?
答案 0 :(得分:6)
我建议您查看Alamofire。这是一个完全为Swift构建的梦幻般的网络库,并且在过去的几个月中确实受到欢迎。这使得调用Web服务以获取数据非常容易。
如果您确实需要使用网络套接字连接到您的服务器,那么我要查看由Square的好人建立的SocketRocket。这是Github上他们项目的链接。
由于您是iOS开发的新手,我建议使用一个简单的架构,您可以从视图控制器中抽象出网络调用。
class ChatManager {
// Add property for socket
class var sharedInstance: ChatManager {
struct Singleton { static let instance = ChatManager() }
return Singleton.instance
}
init() {
// Create the socket
}
func sendMessage(message: String) {
// Push the message onto the socket
}
// Delegate methods
func messageReceived(message: String) {
// Emit the message using NSNotificationCenter
}
}
class ViewController1 : UIViewController {
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
// Register for NSNotification coming from ChatManager
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
NSNotificationCenter.defaultCenter().removeObserver(self)
}
}
class ViewController2 : UIViewController {
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
// Register for NSNotification coming from ChatManager
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
NSNotificationCenter.defaultCenter().removeObserver(self)
}
func userAddedNewChatMessage(message: String) {
ChatManager.sharedInstance.sendMessage(message)
}
}