RelayKit 0.2.2

RelayKit 0.2.2

测试已测试
Lang语言 SwiftSwift
许可证 MIT
Released最后发布2018年2月
SwiftSwift 版本4.0
SPM支持 SPM

David Moeller维护。



RelayKit 0.2.2

  • David Moeller

目前 iOS 和 watchOS 的 WatchConnectivity 框架只能处理一个代理。在我的当前创业项目 Evomo 中,我们有多达几个独立框架与 Apple Watch 上的对应组件进行通信。为了有效地处理发送者与对其配对的接收者之间的消息,我们开发了 RelayKit

使用方法

补充 Watch Connectivity

创建中继

// On iOS Side
let core = WatchConnectivityCoreIOS()
let relay = Relay(core: core)

// You can access thie relay now anywhere through the shared variable
Relay.shared 

// WatchOS Side
let core = WatchConnectivityCoreWatchOS()
let relay = Relay(core: core)

创建并注册发送者

// To actually send something let your class conform to the Sender protocol
class SenderExample: Sender {
    // This Ident is necessary to match it to its receiver pair
    var moduleIdent: String = "SamplePair"
    
    // This one is necessary for the internal mechanism, it can be nil, no default necessary
    var sendMessageBlock: ((Message, SendingMethod, @escaping (Message) -> Void, @escaping (Error) -> Void) -> Void)?

}

let sender = SenderExample()

// And register it to the relay
relay.register(sender)

创建并注册接收者

// The Receiver must conform to the Receiver Protocol

class SampleReceiver: Receiver {
    
    var moduleIdent: String = "SamplePair"
    
    var message: Message? = nil
    
    func didReceiveMessage(_ message: Message, _ method: SendingMethod, _ replyHandler: ((Message) -> Void)?) {
        self.message = message
    }
    
}

receiver = SampleReceiver()

relay.register(receiver)

发送消息

// To send something it is important to use the correct SendingMethod of the Core you use
// for the WatchConnectivity Core it is as follows:

enum WatchConnectivityCoreMethod: SendingMethod {
        case sendMessage
        case transferUserInfo
}

// Conform to the Message Protocol
struct SampleMessage: Message {
    
    static var messageIdent: String = "SampleMessage"
    
    public let description: String
    
    func encode() -> [String : Any] {
        return [
            "description": description
        ]
    }
    
    static func decode(_ data: [String : Any]) throws -> SampleMessage {
        
        guard let description = data["description"] as? String else { throw MessageError.keyNotFound(key: "description") }
        
        return SampleMessage(description: description)
        
    }
    
}

// Send it
sender.sendMessage(SampleMessage(), WatchConnectivityCoreMethod.sendMessage)

注销

// If you are done you can deregister the sender and receiver
relay.deregister(sender)
relay.deregister(receiver)