这是 Swift iOS 应用程序(内置于 XCode 6.1.1),作为在 Kardia.io 生态系统中测试的开发人员的示例。目前它是硬编码的,可以连接到 RedBearLabs Blend Micro 单元并从中读取数据,这些单元加载了 RedBearLabs 网站推荐的固件。我们对这些单元进行编程,以发出模拟真实心电图轨迹的模拟数据。该应用程序将手机连接到设备,并将发送的数据转发到 Kardia.io 上的服务器(node.js 和 python)。该应用程序还监听并显示从服务器返回的分析。
克隆存储库并在 XCode 中打开。将应用程序加载到您的手机上。该应用程序将使用适当的服务和特征 UUID(见下文)自动连接到附近的 BLE 设备,并开始将数据流式传输到 kardia.io。分析数据实时返回到应用程序。任何异常事件(心律失常)都将记录在表视图中,可以通过向左或向右滑动来访问该表视图。这些事件可以通过向左拉动来删除。
该应用程序查找服务 UUID 713D0000-503E-4C75-BA94-3148F18D941E,其中包含与 Arduino 发出的数据相对应的特征 UUID 713D0002-503E-4C75-BA94-3148F18D941E。这些值在 RedBearLabs 网站上链接的 Blend Micro 固件中定义。
一旦应用程序连接到 BLE 设备(请参阅下面的简要说明),它就会注册一个监听器,以监听硬件数据特征状态的变化。该数据被解释为浮点数并传递给两个回调函数。将其添加到最近数据点的缓冲区中以在图表中呈现。另一个将其作为套接字事件发出。它作为 JSON 对象发出,其中键“amplitude”和“time”分别对应于从硬件接收到的值和发出套接字事件的 ISO8601 时间。
该应用程序还侦听来自服务器的响应,这些响应是具有“heartRate”(不言自明)和“statusCode”键的 JSON 对象。状态代码在 ViewController.swift 中定义的字典中查找,并转换为主视图 statusView。
我们使用 SocketIOClient 库,它包装了 Objective-C 库 Socket Rocket。使用以下事件:
我们使用 Swift-Linechart 库来渲染实时心电图轨迹。它并不能完全满足我们的需求,所以我们修改如下:
当应用程序注册新的异常时,会将其记录在 arrythmiaTimes 全局中,该全局用作表视图的数据源。在这种情况下,“新鲜”意味着仅当服务器报告的状态更改为异常事件(在本例中为心律失常)时才会记录事件,因此重复的心律失常事件不会全部被记录。
请参阅此存储库的问题部分。
这是一个关于使用 Swift 将 BLE 设备连接到 iOS 设备的很好的教程。简而言之,应用程序开始搜索正在宣传特定服务 UUID 的蓝牙外围设备。当找到一个时,它会连接并寻找特定的 UUID 特征。如果找到,它就会开始监听该数据。
每当视图需要更新时,您都必须在主 (UI) 线程上运行该代码。这就是为什么您会看到如下代码块:
dispatch_async(dispatch_get_main_queue()) {
// UI-updating code goes here
}
事件由 NSNotificationCenter 处理 - 注册侦听器和触发事件是非常不言自明的。这是术语的快速 Swift : Javascript 翻译:
例子:
foo.on('bar', doAThing)
变成
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("doAThing"), name: "bar", object: nil)
函数可以具有相同的名称,只要它们具有不同的参数 - 这在协议中经常发生。
可以在 Main.storyboard 中或以编程方式在代码中创建和约束视图。这个应用程序使用了两者的混合 - 主视图全部采用后一种风格,而表格视图则使用前者。