Xcode 8 beta 6 AnyObject Swift 3 变化
Posted
技术标签:
【中文标题】Xcode 8 beta 6 AnyObject Swift 3 变化【英文标题】:Xcode 8 beta 6 AnyObject Swift 3 changes 【发布时间】:2016-08-18 13:53:29 【问题描述】:Xcode beta 6 改变了一些 Swift 语言
由于“id”现在导入为“Any”而不是“AnyObject”,您可能会在之前对“AnyObject”执行动态查找时看到错误。
我已经尝试过在执行动态查找之前显式转换为 AnyObject 或强制转换为特定对象类型的修复方法
但我不确定我做的是否正确 - 有人可以帮忙吗这是来自 Beta 5 的原始工作代码
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.name.text = maindata["name"] as? String
cell.id.text = maindata["id"] as? String
//team_id.text = maindata["team_id"] as? String
return cell
https://www.dropbox.com/s/ln0vx3b9rbywv83/Screen%20Shot%202016-08-18%20at%2014.32.23.png?dl=0
【问题讨论】:
【参考方案1】:根据 beta 6 发行说明,您必须(桥接)转换为 AnyObject
cell.name.text = (maindata["name"] as AnyObject) as? String
或强制转换
cell.name.text = maindata["name"] as! String
这是更喜欢具有不同属性类型的自定义类/结构而不是普通字典的另一个原因。
【讨论】:
不幸的是,即使使用任何一个选项,它们都会产生错误 Type Any has no subscript members still. 由于我的数据是 JSON 提要,我不确定如何按照您的建议使用自定义类或结构?values
是如何声明的?
价值观 = 试试看! JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSMutableArray
不要使用 NSMutableArray
至少使用 Swift Array
[[String:AnyObject]]
或 [[String:Any]]
。 var
的声明为您免费提供可变性。【参考方案2】:
我需要改变我的方法并放弃 NSMutableArray(我很高兴)
所以我将空数组声明如下
var values = [[String:AnyObject]]()
然后像现在这样将数据弹出到其中
values = try! JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! [[String : AnyObject]];
另一个小调整
let maindata = values[(indexPath).row]
工作完成 - 感谢 @vadian 跳起来聊天以帮助我理解他的回答,这在技术上是正确的
【讨论】:
'values' 不是字典数组吗?以上是关于Xcode 8 beta 6 AnyObject Swift 3 变化的主要内容,如果未能解决你的问题,请参考以下文章
“无法将类型 'String' 的值分配给类型 'AnyObject?'”,Swift 3,Xcode 8 beta 6
[NSObject:AnyObject]?在 Xcode 6 beta 6 中没有名为“下标”的成员错误
类型“AnyObject”不符合协议“NSFetchRequestResult”
Xcode 8 beta 6 中的 performActionForShortcutItem