测试已测试 | ✗ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布最新发布 | 2015年6月 |
SPM支持 SPM | ✗ |
维护者 Ricardo Pereira.
依赖项 | |
Runes | = 2.0.0 |
SwiftWebSocket | = 0.1.18 |
SocketIO-Kit 是一个具备类型安全、简洁语法和注重速度的iOS客户端,它只实现了一种传输方式,即 WebSocket,并且使用 SwiftWebSocket。
下载 项目,并将 SocketIO-Kit
文件夹复制到您的项目中并使用 Source
文件。由于 SocketIO-Kit 使用了中缀运算符进行单子函数,因此您需要一个 Runes v2.0.0(Swift 1.2)框架来运行 SocketIO-Kit,并且还需要 SwiftWebSocket v0.1.18(Swift 1.2)。
手动安装时无需导入 import SocketIOKit
。
Swift2
分支。
import SocketIOKit
// Type safety events
enum AppEvents: String, Printable {
case ChatMessage = "chat message"
case GetImage = "getimage"
case Image = "image"
var description: String {
return self.rawValue
}
}
// Mutable
var socket: SocketIO<AppEvents>!
socket = SocketIO(url: "https://:8000/")
// or
// Immutable
let socket = SocketIO<AppEvents>(url: "https://:8000/")
socket.on(.ConnectError) {
switch $0 {
case .Failure(let error):
println(error)
default:
break
}
}.on(.TransportError) {
switch $0 {
case .Failure(let error):
println("WebSocket error: \(error)")
default:
break
}
}.on(.Connected) { result in
println("Connected")
socket.emit(.ChatMessage, withMessage: "I'm iOS")
}.on(.Disconnected) { result in
switch result {
case .Message(let reason):
println("Disconnected: \(reason)")
default:
break
}
}
socket.on(.ChatMessage) {
switch $0 {
case .Message(let message):
println("Remote: \(message)")
default:
println("Not supported")
}
}
socket.connect()
选项
socket = SocketIO(url: "https://:8001/", withOptions: SocketIOOptions().namespace("/gallery"))
获取图像
// NodeJS Server
var io = require('socket.io')(http)
io.on('connection', function(socket) {
socket.on('getimage', function(msg) {
// Image
fs.readFile(__dirname + '/image.png', function(err, buf){
// It's possible to embed binary data within arbitrarily-complex objects
socket.emit('image', { image: true, buffer: buf.toString('base64') });
});
});
});
// SocketIO-Kit Client
socket.on(.Image) {
switch $0 {
case .JSON(let json):
if let image = json["buffer"] as? String >>- SocketIOUtilities.base64EncodedStringToUIImage {
println(image)
}
default:
println("Not supported")
}
}
使用结构体
struct ImageInfo: SocketIOObject {
let buffer: String
init(buffer: String) {
self.buffer = buffer
}
init(dict: NSDictionary) {
self.init(buffer: dict["buffer"] as! String) //Force casts should be avoided!
}
var asDictionary: NSDictionary {
return ["buffer": buffer]
}
}
// Example using ImageInfo
socket.on(.Image) {
switch $0 {
case .JSON(let json):
let imageInfo = ImageInfo(dict: json) //<---
if let image = imageInfo.buffer >>- SocketIOUtilities.base64EncodedStringToUIImage {
println(image)
}
default:
println("Not supported")
}
}
使用类
class Person: SocketIOObject {
let name: String
init(name: String) {
self.name = name
}
convenience required init(dict: NSDictionary) {
self.init(name: dict["name"] as! String) //Force casts should be avoided!
}
var asDictionary: NSDictionary {
return ["name": name]
}
}
// Example sending John instance
let john = Person(name: "John")
socket.emit(.Login, withObject: john)
您可以通过提供 DEBUG 标志来选择查看消息。只需在 Build Settings > Swift Compiler - Custom Flags: Other Swift Flags
中添加 -D DEBUG
即可。
请参阅 CONTRIBUTING 文档。感谢 贡献者!
Ricardo Pereira,@ricardopereiraw
这是一个免费软件,可以根据许可证文件中指定的条款重新分发。