2016-04-23 6 views
3

ich die folgende Fehlermeldung erhalten:Wert kann nicht vom Typ zuordnen '[[String: ANYOBJECT]]' eingeben '[[Zeichenfolge: ANYOBJECT]]'

Cannot assign value of type '[[String : AnyObject]]' to type '[[String : AnyObject?]]'

Es ist seltsam, diese Aufgabe arbeiten Bevor ich dann meinen Xcode neu startete, fing ich an, diesen Fehler zu bekommen. Von dem, was ich online gelesen habe, sollte dies den Fehler nicht geben.

Hier ist mein Code:

import UIKit 
    import Alamofire 
    import SwiftyJSON 

    class Signal Condo TableViewController: UITableViewController { 
    @IBOutlet var tableview: UITableView! 

var singleCondoData = [[String:AnyObject]]() 
var CondoIndivi = [[String:AnyObject]]() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Uncomment the following line to preserve selection between presentations 
    // self.clearsSelectionOnViewWillAppear = false 

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller. 
    // self.navigationItem.rightBarButtonItem = self.editButtonItem() 

    self.tableView.delegate = self 
    self.tableView.dataSource = self 
} 

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

// MARK: - Table view data source 

override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    // #warning Incomplete implementation, return the number of sections 
    return 1 
} 

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    // #warning Incomplete implementation, return the number of rows 
    return singleCondoData.count 
} 


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! SignleTableTableViewCell 


    if singleCondoData.count != 0 { 


     let dict = singleCondoData[indexPath.row] as NSDictionary 


     //cell.label1.text? = (dict["name"] as? String)! 

     if let nullcheck = (dict["address"] as? String) { 
      cell.label2.text? = nullcheck 
     } 

    } 



    return cell 
} 



override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    let dict = singleCondoData[indexPath.row] as NSDictionary 


    if let unitNullCheck = (dict["mls_number"] as? String) { 
     let item_id = unitNullCheck 
     getCondoUnits(item_id) 
     print(item_id) 

    } 



} 

    //get the individual condo id 

func getCondoUnits(condo_id : String){ 


    Alamofire.request(.GET, "http://android.goidx.com/search/?mls_number=" + String(condo_id)).validate().responseJSON { response in 

     if let value = response.result.value { 
      let json = JSON(value) 

      if let resData = json.arrayObject { 

       self.CondoIndivi = (resData as? [[String:AnyObject]])! 

       print(self.CondoIndivi) 


      } 

      if self.CondoIndivi.count > 0 { 

       self.tableview.reloadData() 
      } 


     } 

    } 

} 



override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if let identifier = segue.identifier { 


     switch identifier { 

     case "details" : 


      let buildingdDetailVC = segue.destinationViewController as! DetailsViewController 


      buildingdDetailVC.CondoIndivi2 = self.CondoIndivi // line of the error 
      default: 
      break 
     } 

     } 

     } 


     } 

Antwort

1

Die Art der CondoIndivi2 Variable ist [[String: AnyObject?]], aber sie sind vorbei ein Array vom Typ [[String: AnyObject]] wo die Wörterbuch Werte sind nicht optional.

Da jede nicht-optionaler Wert mit gleichen Typs können sicher an seinen optionalen entsprechenden umgewandelt werden, können Sie wie folgt vorgehen:

buildingdDetailVC.CondoIndivi2 = self.CondoIndivi.map { $0 as [String: AnyObject?] } 
+0

ich sehe. es sollte nicht ein optionales sein. Danke und während wir bei der schnellen Frage sind, versuche ich, den Wert von diesem Array-Diktat wie diesem abzurufen, wenn man bath = self.CondoIndivi2 ["bath"] as! [[String: AnyObject]] { } aber ich bekomme diesen Fehler Kann keinen Wert vom Typ '[[String: AnyObject]]' mit einem Index vom Typ 'String' I indizieren habe das ganze Internet gegraben, aber dieser Fehler gibt mir nicht das richtige Problem. Was denkst du? –

+0

'CondoIndivi2' ist ein Array von Wörterbüchern, kein Wörterbuch. Daher sollten Sie Integer-Indizes verwenden, um das Dictionary zuerst zu erhalten, als den String "bath" zu verwenden, um den Wert zu erhalten. Beispiel: 'if let bath = self.CondoIndivi2 [0] [" bath "] als? String {... ' – ozgur

+0

Danke, es hat funktioniert –