测试已测试 | ✓ |
Lang语言 | SwiftSwift |
许可证 | MIT |
Released最后发布 | 2018年2月 |
SwiftSwift 版本 | 4.0 |
SPM支持 SPM | ✗ |
由David Moeller维护。
目前 iOS 和 watchOS 的 WatchConnectivity 框架只能处理一个代理。在我的当前创业项目 Evomo 中,我们有多达几个独立框架与 Apple Watch 上的对应组件进行通信。为了有效地处理发送者与对其配对的接收者之间的消息,我们开发了 RelayKit。
// 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)