Skip to content

Commit 9a05f60

Browse files
committed
tweaks to once
1 parent 70c7dac commit 9a05f60

File tree

3 files changed

+20
-14
lines changed

3 files changed

+20
-14
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,8 @@ Methods
143143
11. `reconnect()` - Causes the client to reconnect to the server.
144144
12. `joinNamespace()` - Causes the client to join nsp. Shouldn't need to be called unless you change nsp manually.
145145
13. `leaveNamespace()` - Causes the client to leave the nsp and go back to /
146+
14. `once(event: String, callback: NormalCallback)` - Adds a handler that will only be executed once.
147+
15. `once(event event: String, callback: NormalCallbackObjectiveC)` - Adds a handler that will only be executed once.
146148

147149
Client Events
148150
------

SocketIOClientSwift/SocketEventHandler.swift

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,19 +35,21 @@ private func emitAckCallbackObjectiveC(socket: SocketIOClient?, num: Int?)
3535
}
3636

3737
struct SocketEventHandler {
38-
let id = NSUUID()
3938
let event: String
39+
let id: NSUUID
4040
let callback: NormalCallback?
4141
let callBackObjectiveC: NormalCallbackObjectiveC?
4242

43-
init(event: String, callback: NormalCallback) {
43+
init(event: String, id: NSUUID = NSUUID(), callback: NormalCallback) {
4444
self.event = event
45+
self.id = id
4546
self.callback = callback
4647
self.callBackObjectiveC = nil
4748
}
4849

49-
init(event: String, callback: NormalCallbackObjectiveC) {
50+
init(event: String, id: NSUUID = NSUUID(), callback: NormalCallbackObjectiveC) {
5051
self.event = event
52+
self.id = id
5153
self.callback = nil
5254
self.callBackObjectiveC = callback
5355
}

SocketIOClientSwift/SocketIOClient.swift

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -430,14 +430,15 @@ public final class SocketIOClient: NSObject, SocketEngineClient {
430430
public func once(event: String, callback: NormalCallback) {
431431
Logger.log("Adding once handler for event: %@", type: logType, args: event)
432432

433-
var handler: SocketEventHandler?;
434-
435-
handler = SocketEventHandler(event: event) { (data, ack: AckEmitter?) in
436-
self.handlers = ContiguousArray(self.handlers.filter { $0.id != handler!.id })
433+
let id = NSUUID()
434+
435+
let handler = SocketEventHandler(event: event, id: id) {[weak self] (data, ack: AckEmitter?) in
436+
guard let this = self else {return}
437+
this.handlers = ContiguousArray(this.handlers.filter {$0.id != id})
437438
callback(data, ack)
438439
}
439440

440-
handlers.append(handler!)
441+
handlers.append(handler)
441442
}
442443

443444
/**
@@ -446,14 +447,15 @@ public final class SocketIOClient: NSObject, SocketEngineClient {
446447
public func once(event event: String, callback: NormalCallbackObjectiveC) {
447448
Logger.log("Adding once handler for event: %@", type: logType, args: event)
448449

449-
var handler: SocketEventHandler?;
450-
451-
handler = SocketEventHandler(event: event) { (data, ack: AckEmitterObjectiveC?) in
452-
self.handlers = ContiguousArray(self.handlers.filter { $0.id != handler!.id })
450+
let id = NSUUID()
451+
452+
let handler = SocketEventHandler(event: event, id: id) {[weak self] (data, ack: AckEmitterObjectiveC?) in
453+
guard let this = self else {return}
454+
this.handlers = ContiguousArray(this.handlers.filter {$0.id != id})
453455
callback(data, ack)
454456
}
455-
456-
handlers.append(handler!)
457+
458+
handlers.append(handler)
457459
}
458460

459461
/**

0 commit comments

Comments
 (0)