這是 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-3148F18D。這些值在 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 中或以程式設計方式在程式碼中建立和約束視圖。這個應用程式使用了兩者的混合 - 主視圖全部採用後一種風格,而表格視圖則使用前者。