Swift 中的“类型‘值’没有下标成员”错误

Posted

技术标签:

【中文标题】Swift 中的“类型‘值’没有下标成员”错误【英文标题】:“Type 'Values' has no subscript members” error in Swift 【发布时间】:2016-11-15 22:58:15 【问题描述】:

尝试在 tableview 中显示图像时出错。 它正在成功显示文本,但没有显示任何图像。

class ViewController: UITableViewController 
    var ref: FIRDatabaseReference!
    var refHandle: UInt!
    var valueList = [Values]()

    override func viewDidLoad() 
        super.viewDidLoad()

        ref = FIRDatabase.database().reference()

        fetchFirebaseData()
    

    func fetchFirebaseData() 
        refHandle = ref.child("SwiftJson").observe(.childAdded, with:
            (snapshot) in
                if let dictionary = snapshot.value as? [String : AnyObject] 
                    print(dictionary)

                    let value = Values() as AnyObject

                    value.setValuesForKeys(dictionary)
                    self.valueList.append(value as! Values)

                    self.tableView.reloadData()
                
        )
    

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return valueList.count
    

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

        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! FTableViewCell
        let value = valueList[indexPath.row]

        cell.fTitle.text = value.title
        let imageUrlString = valueList[indexPath.row]["image"] as! String
        let imageURL = NSURL(string: imageUrlString)
        let imageData = NSData(contentsOf: imageURL as! URL)
        cell.fImage.image = UIImage(data: imageData as! Data)

        return cell
    

这里我正在解析 Firebase 数据库中的数据并尝试在 tableview 上显示它。

【问题讨论】:

究竟是哪一行导致了错误? 这个问题已经被问过很多次了! 【参考方案1】:

可能您遇到的问题基本上是您试图访问 anyObject 类型的下标。在 swift 中, anyObject 没有下标。我不知道您为什么要投射 Values() as AnyObject,但这可能就是您收到此错误的原因。

此外,请尝试更好地了解其他问题。您的问题可能以前被问过。

【讨论】:

【参考方案2】:

你有:

var valueList = [Values]()

然后:

let imageUrlString = valueList[indexPath.row]["image"] as! String

你的错误信息告诉你到底哪里出了问题:

“类型‘值’没有下标成员”

valueList[indexPath.row]Value 类型,据我所知,它的类中没有定义下标。这正是错误所说的。你正试图在它上面调用一个下标:

valueList[indexPath.row]["image"]

查看您之前将Value's 分配给数组时的代码,我猜它会解开为[String : AnyObject]

所以你需要:

if let value = valueList[indexPath.row] as? [String : AnyObject], let imageUrlString = value["image"] as? String 
    let imageURL = NSURL(string: imageUrlString)
    //etc, etc...

【讨论】:

以上是关于Swift 中的“类型‘值’没有下标成员”错误的主要内容,如果未能解决你的问题,请参考以下文章

swift swift中的错误处理3

swift Swift中的错误处理示例

SKPaymentTransaction(Swift 3)中的交易错误转换问题

从 swift 1.2 迁移后 swift2 中的 healthKit 错误

从 swift 1.2 迁移后 swift2 中的 healthKit 错误

NSTimer 中的错误(Swift:Xcode)