如何在不转换语法的情况下更新此Swift2 for-in循环以匹配Swift3的转换所需语法?

时间:2017-01-18 23:03:54

标签: swift swift3

所以我试着让下面的代码在swift 3下工作,但无论我尝试什么,我只会导致新的错误。我似乎无法弄清楚如何将dataArray对象转换为将要传递的任何东西。 (原始开发人员没有输入它,并且它总是通过通知对象设置,使得跟踪它的实际数据类型向下...很难;最好我可以告诉它只是通过解析从服务器JSON生成的字典)

var dataArray:NSMutableArray = []

func foo(_ notification: Notification)
{
    if let id = notification.object as? Int
    {
        for dataOut in dataArray where Int(dataOut["id"] as! Int) == id {
            self.performSegue(withIdentifier: "fooSegue", sender: dataOut)

            return;
        }
    }
}

尝试编译它会产生关于Type 'NSFastEnumerationIterator.Element' (aka 'Any') has no subscript members的语法错误。

1 个答案:

答案 0 :(得分:1)

dataArrayNSMutableArray类型的必要原因吗?如果我收到某种Array对象,我断言它包含Dictionary类型的元素,我会执行以下操作:

if let id = id as? Int,
    let data = dataArray as NSArray as? [[String:Any]]
{
    for element in data where Int(element["id"] as! Int) == id
    {
        self.performSegue(withIdentifier: "fooSegue", sender: element)
        return
    }
}

修改dataArrayNSMutableArrayNSArray[[String:Any]]和下标element而不是data