寫這篇BLOG前,有些話不得不提一下,就僅當發發惱騷吧。。。
今天下午為了一個Alamofire取得數據而更新TableView的問題,查了一下午的百度(360也是見鬼的一樣),竟然沒有一個簡單明了的回答,
而唯一幾個比較接近答案的,說要 self.tableView.reloadData(),也沒有貼上代碼,說要放在哪個函數內,
都猶抱琵琶半遮面,讓初學者自己采坑,於是郁悶了一下午,剛剛回到家,試想想,要不試試英文網,畢竟Swift就是人家老外的,
說不定老外會告訴你,怎么取得數據並綁定TableView,果不其然,用了不到3份鍾的時候就完美解決。
寫這篇BLOG,如果后面的新手有幸看到這篇,也可以少走很多彎路。。。
還有
特別感謝英文網
http://blog.revivalx.com/2015/02/23/uitableview-tutorial-in-swift-using-alamofire-haneke-and-swiftyjson/
有一點特別注意的是,方法 self.tableView.reloadData() 要在變量wifi改變的時候立馬加入
直接看以下的代碼了。。。

//
// TableViewController.swift
// MyTableView-1387
//
// Created by apiapia on 17/1/6.
// Copyright © 2017年 apiapia. All rights reserved.
//$ curl http://httpbin.org/get
//
//{
// "args": {},
// "headers": {
// "Accept": "*/*",
// "Connection": "close",
// "Content-Length": "",
// "Content-Type": "",
// "Host": "httpbin.org",
// "User-Agent": "curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8l zlib/1.2.3"
// },
// "origin": "24.127.96.129",
// "url": "http://httpbin.org/get"
//}
//
import UIKit
import Alamofire
import SwiftyJSON
class TableViewController: UITableViewController {
var wifi = ["StarBuck","MJ"]
// var wifi = [String]()
let url = "https://httpbin.org/get"
//上面wifi可以用 Alamofire獲取遠程數據,
//http://httpbin.org/get
override func viewDidLoad() {
super.viewDidLoad()
// Alamofire取得的網絡數據是異步的
Alamofire.request(url, method: .get).validate().responseJSON { (response) in
// print (response.request)
switch response.result.isSuccess {
case true:
if let value = response.result.value {
let json = JSON(value)
let headers:Dictionary<String,Any>=json["headers"].dictionaryValue
print (headers)
// populating tableview with json from url using Alamofire
// http://blog.revivalx.com/2015/02/23/uitableview-tutorial-in-swift-using-alamofire-haneke-and-swiftyjson/
// self.wifi = ["1","2","3","4"]
// self.tableView.reloadData()
self.wifi = [String]() // 重新生成數組成功
// ["Accept-Language", "Host", "Accept", "User-Agent", "Accept-Encoding"]
for (index,_) in headers{
print (index)
self.wifi.append(index)
}
self.tableView.reloadData()
}
case false:
print ("網絡請求失敗")
}
}
print ("wifi現在是:",wifi)
// Alamofire.request(url).validate().responseJSON { response in
// switch response.result.isSuccess {
// case true:
// if let value = response.result.value {
// let json = JSON(value)
// if let number = json[0]["phones"][0]["number"].string {
// // 找到電話號碼
// print("第一個聯系人的第一個電話號碼:",number)
// }
// }
// case false:
// print("")
// }
// }
//
//注冊表格
self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "wifiCell")
//去掉表格尾部空行
self.tableView.tableFooterView = UIView(frame: CGRect.zero)
self.tableView.reloadData()
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 3 //共有三個分區
}
//返回三個分區相應的表格行數
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
if section == 1 {
return self.wifi.count
}
else{
return 1
}
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.section == 1 {
let cell = tableView.dequeueReusableCell(withIdentifier: "wifiCell", for: indexPath)
cell.textLabel?.text = self.wifi[indexPath.row]
return cell
}else{
return super.tableView(tableView, cellForRowAt: indexPath)
}
}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath.section == 1 {
return 50
}else {
return super.tableView(tableView, heightForRowAt: indexPath)
}
}
//取消高亮直選
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
}
// 當 override了一個靜態表格的時候要用到 indentationLevelForRowAt這個方法
// 因為 數據源 對新加進來的 cell一無所知 ,所以要用這個代理方法
override func tableView(_ tableView: UITableView, indentationLevelForRowAt indexPath: IndexPath) -> Int {
if indexPath.section == 1 {
let newIndexPath = IndexPath(row: 0, section: indexPath.section)
return super.tableView(tableView, indentationLevelForRowAt: newIndexPath)
}else {
return super.tableView(tableView, indentationLevelForRowAt: indexPath)
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
/*
// Override to support conditional editing of the table view.
override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
// Return false if you do not want the specified item to be editable.
return true
}
*/
/*
// Override to support editing the table view.
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
// Delete the row from the data source
tableView.deleteRows(at: [indexPath], with: .fade)
} else if editingStyle == .insert {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
}
}
*/
/*
// Override to support rearranging the table view.
override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) {
}
*/
/*
// Override to support conditional rearranging of the table view.
override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool {
// Return false if you do not want the item to be re-orderable.
return true
}
*/
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
}
