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 中的“类型‘值’没有下标成员”错误的主要内容,如果未能解决你的问题,请参考以下文章
SKPaymentTransaction(Swift 3)中的交易错误转换问题
从 swift 1.2 迁移后 swift2 中的 healthKit 错误