2017-02-10 159 views
-1

maindata我有這個問題(鍵入任何沒有標名成員)在這一行`誤差在3迅速

import Foundation 
import UIKit 
import WebKit 
import GoogleMobileAds 

class HomeViewController: UIViewController, UITableViewDelegate, UITableViewDataSource,GADBannerViewDelegate {  

    @IBOutlet weak var BannerView: GADBannerView! 

    @IBOutlet var tableView: UITableView! 
    @IBAction func refresh(_ sender: AnyObject) { 
     get() 
    } 

    var values:NSArray = [] 

    override func viewDidLoad() { 
     super.viewDidLoad(); 

     let request = GADRequest() 
     request.testDevices = [kGADSimulatorID] 
     BannerView.delegate = self 
     BannerView.adUnitID = "" 
     BannerView.rootViewController = self 
     BannerView.load(request) 

     get(); 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func get(){ 
     let url = URL(string: "http://www.X.php") 
     let data = try? Data(contentsOf: url!) 
     values = try! JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSArray 

     tableView.reloadData()    
     } 

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return values.count; 
    } 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

     let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! SpecialCell 

     let maindata = values[(indexPath as NSIndexPath).row] 

     cell.info!.text = maindata ["Info"] as String? 

     return cell; 
    } 
} 

image

謝謝大家..

+2

請花些時間來很好地設置您的問題。使用'{}'按鈕來格式化代碼。刪除多個空行。指定在哪一行發生錯誤。 – Codo

+2

你的問題的原因是使用'NSArray'。它缺少任何類型的信息。進一步 - 但沒有關係 - '.mutableContainers'在Swift中完全沒有意義,並且從遠程URL同步加載數據是非常糟糕的編程習慣。 – vadian

回答

0

我相信你有給mainData一種類型是這樣的:

let maindata = values[(indexPath as NSIndexPath).row] as? [String:Any]

然後確保mainData實際上包含了值

所有的
if let info = mainData?["Info"] as? String { 
    cell.info!.text = info 
} 
+0

謝謝你的工作 – hamid

1

首先聲明的數據源數組斯威夫特Array。 Foundation NSArray沒有類型信息,完全不能幫助Swift的強大類型系統。

var values = [[String:Any]]() 

然後異步加載數據(!),並在cellForRow重新加載表視圖在主線程

func get() { 
    let url = URL(string: "http://www.X.php")! 
    let task = URLSession.shared.dataTask(with: url) { (data, response, error) in 
     if error != nil { 
      print(error!) 
     } else { 
      do { 
       self.values = try JSONSerialization.jsonObject(with: data!, options: []) as! [[String:Any]] 
       DispatchQueue.main.async { 
       self.tableView.reloadData() 
       } 
      } catch { 
       print(error) 
      } 
     }   
    } 
    task.resume() 
} 

然後分配值

let maindata = values[indexPath.row] 
cell.info!.text = maindata["Info"] as? String 

現在編譯器知道所有的下標類型和錯誤消失。