切换到 Swift3 后我有: Type NSFastEnumerationIterator.Element (aka Any) has no subscript members

After switching to Swift3 I have: Type NSFastEnumerationIterator.Element (aka Any) has no subscript members

这实际上是对这个问题的跟进: Bryan 的回答在以前版本的 Swift 中对我有用,但现在当我转到 Swift 3 时,此代码:

if (defaults.object(forKey: "fb_friends") != nil) {
    var friends = (defaults.objectForKey("fb_friends") as! NSMutableArray)
                    .map{[=11=]["id"]!!}
                    .joinWithSeparator(",")
                friends+=",\(defaults.stringForKey("facebookId")!)"
                params["friends"] = friends 
            }

尤其是这一行 .map{[=14=]["id"]!!} 给我一个错误:

Type NSFastEnumerationIterator.Element (aka Any) has no subscript members

这可能是什么问题?

报错信息很明确,您无法再访问Any in Swift 的下标成员 3.

在这种情况下,您可以将其转换为 NSDictionary

var friends = (defaults.objectForKey("fb_friends") as! NSArray)
    .map{([=10=] as! NSDictionary)["id"] as! String}
    .joined(separator: ",")