1
는
나는 이것을 구현하기 위해 관리 : https://github.com/mxcl/PromiseKit/issues/136PromiseKit 4 여기에 설명 된대로 랩 위임 내가 Promisekit</p> <p>을 사용하여 랩 대표와 싱글 톤을 구현하기 위해 노력하고
그것은 작동하지만, 약속은의 값을 유지 첫 번째 전화. 그것은 가치를 갱신하지 않습니다.
샘플 코드 :
open class APIClient: NSObject {
static let sharedInstance = APIClient()
var mSocket: GCDAsyncSocket!
var deferred = Promise<[String:Any]>.pending()
var retainCycle: NSObject?
override init() {
mSocket = GCDAsyncSocket()
super.init()
mSocket.setDelegate(self, delegateQueue: DispatchQueue.main)
deferred.promise.always {
print(self) // here we force a retain on self inside the promise object
// it will be released once processed
}.catch { (error) in
}
}
// MARK: - sendMessageTCP
open func sendMessageTCP(message data:Data) -> Promise<[String:Any]> {
mSocket.write(data, withTimeout: 10, tag: 0)
return deferred.promise
}
}
extension APIClient: GCDAsyncSocketDelegate {
public func socket(_ sock: GCDAsyncSocket, didWriteDataWithTag tag: Int) {
sock.readData(withTimeout: -1, tag: 0)
}
public func socket(_ sock: GCDAsyncSocket, didRead data: Data, withTag tag: Int) {
let array = data.withUnsafeBytes {
[UInt8](UnsafeBufferPointer(start: $0, count: data.count))
}
let parameters: [String:Any] = [
"status": true,
"data": bytesToHexString(bytes: array),
"ui_message": "Read Data"
]
deferred.fulfill(parameters)
retainCycle = nil
}
private func bytesToHexString(bytes: [UInt8]) -> String {
return bytes.map{String(format: "%02X", $0)}.joined(separator: "")
}
}