氣象人

氣象人(The Weather Man)是一部我很喜歡的電影,由當年正紅的尼可拉斯凱吉主演,雖然尼可現在已經過氣,但當年他主演過很多好片。

之所以喜歡這部電影是因為它的劇情真實反映了人生很多事,以及無奈。希望大家有空可以欣賞一下,我這邊就不透露劇情,只節錄電影中最令我有感覺的一句台詞:The shit life, we must chuck somethings. We must chuck them, in the shit life. 中文意思是:在人生坎坷的旅途中,一定要有所放棄,因為人生坎坷。當時聽到這句話真的快落淚了。

閒話不多說,趕緊來介紹這個App。簡單講,你可以用這個App查詢全國22個縣市一週內的天氣。因為我利用解析JSON的方式,抓取了台北市政府關於一週氣象預測的Open Data。執行動畫如下:

擷取畫面如下:

UI沒有特別美化,因為時間實在不多,我把重點擺在功能完成上。就像氣象人電影說的,we must chuck somethings. we must chuck them…

本App用到的關鍵技術如下:

  1. 解析JSON資料
  2. 用程式開啟下一個頁面以及回到首頁
  3. 用程式傳遞資料到下一個頁面

關鍵程式碼在此:

@IBAction func button_cityselection(_ sender: UIButton) {

var date = [String]()

var weather = [String]()

var city: String = “”

switch sender {

case button_city[0]:

city = “臺北市”

case button_city[1]:

city = “新北市”

case button_city[2]:

city = “桃園市”

case button_city[3]:

city = “臺中市”

case button_city[4]:

city = “臺南市”

case button_city[5]:

city = “高雄市”

case button_city[6]:

city = “基隆市”

case button_city[7]:

city = “新竹縣”

case button_city[8]:

city = “新竹市”

case button_city[9]:

city = “苗栗縣”

case button_city[10]:

city = “彰化縣”

case button_city[11]:

city = “南投縣”

case button_city[12]:

city = “雲林縣”

case button_city[13]:

city = “嘉義縣”

case button_city[14]:

city = “嘉義市”

case button_city[15]:

city = “屏東縣”

case button_city[16]:

city = “宜蘭縣”

case button_city[17]:

city = “花蓮縣”

case button_city[18]:

city = “臺東縣”

case button_city[19]:

city = “澎湖縣”

case button_city[20]:

city = “金門縣”

case button_city[21]:

city = “連江縣”

default:

break

}

let urlStr = “http://data.taipei/opendata/datalist/apiAccess?scope=resourceAquire&rid=e6831708-02b4-4ef8-98fa-4b4ce53459d9"

if let url = URL(string: urlStr) {

let task = URLSession.shared.dataTask(with: url) { (data, response , error) in

if let data = data, let dic = try?

JSONSerialization.jsonObject(with: data) as? [String: Any], let result1 = dic?[“result”] as? [String: Any], let result2 = result1[“results”] as? [[String: Any]]{

for location in result2 {

let id = location[“_id”] as! String

let city_t = location[“locationName”] as! String

let weather_t = location[“parameterName1”] as! String

let date_t = location[“startTime”] as! String

if (Int(id)! % 2 == 0) && city_t == city {

date.append(String(date_t.prefix(10)))

weather.append(String(weather_t))

}

}

}

}

task.resume()

}

while date.count != 7 {

}

if let controller = storyboard?.instantiateViewController(withIdentifier: “weathertableview”) as? WeatherTableViewController {

for i in 0…6 {

controller.date.append(date[i])

controller.weather.append(weather[i])

}

present(controller, animated: true, completion: nil)

}

}

GitHub在這:

這次覺得最困難的部分就是讀懂dataTask程式的寫法,光是這部分真的卡關卡很久,只能說Swift還蠻多眉角的。其實我之前就有個夢想,想寫一個App可以統合所有政府機關的Open Data,然後利用大數據的分析,從中找出一些關鍵的、有價值的資訊,這次學會了解析JSON的技術真的很開心,感謝彼得潘。大家也可以拿這個App和iPhone內建的天氣App比看看誰的比較準喔~~XD

--

--