惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The Cloudflare Blog
L
LangChain Blog
WordPress大学
WordPress大学
V
V2EX
M
MIT News - Artificial intelligence
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Stack Overflow Blog
Stack Overflow Blog
J
Java Code Geeks
F
Fortinet All Blogs
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
腾讯CDC
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
D
Docker
Recent Announcements
Recent Announcements
GbyAI
GbyAI
博客园 - 叶小钗
小众软件
小众软件
Hugging Face - Blog
Hugging Face - Blog
T
The Blog of Author Tim Ferriss
人人都是产品经理
人人都是产品经理
Engineering at Meta
Engineering at Meta
Y
Y Combinator Blog
雷峰网
雷峰网
The GitHub Blog
The GitHub Blog

Nic Lin's Blog

謝明真 - 高效領導力的課後筆記 NFT 開發實戰!基礎智能合約入門 (3) NFT 開發實戰!基礎智能合約入門 (2) NFT 開發實戰!基礎智能合約入門 (1) 如何自我檢測 log4j CVE 漏洞 Rails 如何在資料寫入時記錄來源 IP 位置 如何經營工程師 Youtube 頻道 - Part 8 營收篇 如何經營工程師 Youtube 頻道 - Part 7 酸民文化篇 如何經營工程師 Youtube 頻道 - Part 5 設備器材篇 如何經營工程師 Youtube 頻道 - Part 4 後製剪輯篇 如何經營工程師 Youtube 頻道 - Part 3 文案企劃篇 如何經營工程師 Youtube 頻道 - Part 2 設備器材篇 如何經營工程師 Youtube 頻道 - Part 1 制訂頻道方向篇 如何經營工程師 Youtube 頻道 - Part 0 Rails 中避免 race condition 的最佳實踐(二) Rails 中避免 race condition 的最佳實踐(一) 10 分鐘整合 google sheet 做自動化開發功能週報 經營 Side Project 300 天所帶來的收穫及挑戰 我的 Youtube 影片製作流程 API 設計時必須注意的 HTTP header 底線問題 如何提升你的程式可讀性之實務技巧(三) 如何提升你的程式可讀性之實務技巧(二) 如何提升你的程式可讀性之實務技巧(一) Ruby 中使用 freeze 優化效能的時機 避免 React 中的 useEffect 無限 render 在 Rails 內輕量使用 Vue Component 的最佳實踐 如何在區域網路用 Docker 架設有 SSL 的 Gitlab 從被問到問人,那些我常問的面試問題 [Rails] 如何漂亮寫出可維護的 query (Maintainable Rails Query) 在已知長度情況下優化 slice 的性能
WatchOS 接 API 實作比特幣幣價顯示 (How to fetch JSON from...
Nic Lin · 2017-12-02 · via Nic Lin's Blog

這篇實作主要是練習如何使用 Swift 去實現

  1. Get JSON from URL
  2. Parse JSON

因為我平常有 Ruby 開發相關區塊鏈接 API 的經驗,所以這邊我挑了 CoinMarketCap 來串接,主要是因為他有直接兌換美元的結果,不需要再去計算,像是其他交易所如 Poloniex 只有 BTC 對 USDT ,畢竟 USDT 並不是真正的美元匯率(只是錨定接近而已)

一開始的 Outlet 跟簡單的 Interaction 就不多說了,就是拉一下 UI 畫面,分別設定好 Label 怎麼顯示、Button 會觸發什麼事件。

在這邊我意外發現一個專門講解 Swift 開發技巧的 Youtube 頻道,講的內容都很新,就以我現在 2017/12/02 來看,可以在影片看到上傳日期是 2017/07/01 ,講解的是最新 Swift 4 如何利用 Decodable 去 Parse JSON

Parsing JSON Just Became Super Easy in Swift 4 with Decodable

直接上程式碼

先宣告一個 Decodable 的 struct, 自訂你需要的型別

struct CryptoCurrency: Decodable {
    let name: String
    let price_usd: String
}
...

解析後並設定 label text 的 function

    func updateBitcoinPrice() {
        self.cryptoCurrencyLabel.setText("Fetching...")
        
        // Coinmarketcap
        guard let url = URL(string: "https://api.coinmarketcap.com/v1/ticker/?limit=10") else { return }
        
        URLSession.shared.dataTask(with: url) { (data, response, error) in
            guard let data = data else { return }
            
            do {
                let crypto_currency = try JSONDecoder().decode([CryptoCurrency].self, from: data)
                
                let btc_price = crypto_currency.first?.price_usd ?? "0.00"
                
                self.cryptoCurrencyLabel.setText("\(btc_price) USD")
                
            } catch let jsonErr {
                print("Error serializing json:", jsonErr)
            }
        }.resume()

這邊我比較懶的部分是直接拉 Array 的第一筆資料去顯示比特幣價格,因為 CoinMarketPrice 的價格顯示是依照交易量排名,也因此我認為比特幣交易量應該都是在第一名,所以在部份比較偷雞XD,不過還要在學習改進的部分是如何針對一長串的 Array 去找到指定符合的數值(今天只學拿到 data 然後解析完輸出)。

小結

不過稍微研究了一下 Swift 4 新的 Decodable + JSONDecoder 用法除了可以達到更簡單的語法撰寫,同時也能夠支援自訂型別,在以往的解決辦法常常要寫很冗長的程式碼或是使用第三方套件到了 Swift 4 都可以通通丟掉了。

實際作品在我的 Github watchOS-BitcoinPrice

參考資料