2014-10-18 176 views
1

下面的代码返回错误“AnyObject是无法转换为字符串”:AnyObject是无法转换为字符串

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "Podcast") 
    var query = PFQuery(className: "Podcast") 
    query.selectKeys(["name", "artist" ]) 
    query.findObjectsInBackgroundWithBlock { 
     (objects: [AnyObject]!, error: NSError!) -> Void in 
     if error == nil { 
      let name: NSArray = objects as NSArray 
      println("objects \(name)") 
      cell.textLabel?.text = name["name"] 
     } 
    } 

如果我加上“的NSString”旁边的“名[”名称“]”。那么我得到的错误“类型Int不确认到StringLiteralConvertible”

任何想法请吗?我正在从Parse提取数据。

+1

这里有一些混淆。如果'name'是一个'NSArray',为什么你把它当成一个字典'name [“name”]'?你用'Int'索引数组而不是字符串。 – vacawama 2014-10-18 23:30:22

回答

5

name["name"]将返回类型为AnyObject?的值。这是可选的,因为字典 查找始终返回可选项,因为密钥可能无效。你应该有条件 它转换为类型NSString这是一个对象类型,然后使用可选的结合(if let) 绑定,为的情况下的变量在那里,循环起来不返回nil

if let myname = name["name"] as? NSString { 
    cell.textLabel?.text = myname 
} 

,或者你想用一个空字符串,如果“名称”不是一个有效的键,零合并运算??就派上用场了:

cell.textLabel?.text = (name["name"] as? NSString) ?? "" 
0

试试这个 cell.textLabel?.text = name["name"] as String

希望它能帮助!

0

在斯威夫特3

cell.textLabel?.text = name["name"] as! String?