模糊使用'mutableCopy()'Swift3

我试图更新Swift 3,我得到了以下错误:

Ambiguous use of 'mutableCopy()' 

在更新之前swift 3.它运行良好。

Swift 2.3

 NSUserDefaults.standardUserDefaults().objectForKey("listsavednews")?.mutableCopy() as! NSMutableArray 

Swift 3.0

 (UserDefaults.standard.object(forKey: "listsavednews")? as AnyObject).mutableCopy() as! NSMutableArray 

我发现Swift3中的mutableCopy返回任何没有方法mutableCopy(),所以它需要投射到AnyObject。

任何帮助谢谢。

我不知道为什么我不能评论。

谢谢大家,我将使用:

 UserDefaults.standard.mutableArrayValue(forKey: "listsavednews") 

mutableCopyNSObject的Objective-C方法。 在Swift 3中使用它几乎没有什么理由。

由于您正在处理UserDefaultsmutableCopy ,您必须处理数组或字典。 或者它可能是一个string。

在Swift 3中这样做的正确方法是使用适当的UserDefaults方法来获取数组或字典。 并将结果分配给一个var 。 这个组合会给你一个可变的数组或可变的字典。

 var someArray = UserDefaults.standard.array(forKey: "somekey") 

要么:

 var someDictionary = UserDefaults.standard.dictionary(forKey: "somekey") 

在上述两种情况下,由于给定密钥可能没有任何数据,因此最终会生成一个可选项。 而且你还得到一个非特定的数组或字典,这是不理想的。 将结果转换为适当的types会更好。

比方说,你有一个string数组,如果当前没有用户默认情况下,你想要一个空的数组。 你可以这样做:

 var someArray = UserDefaults.standard.array(forKey: "somekey" as? [String]) ?? [] 

如果数组包含String以外的内容,则根据需要进行调整

如果你真的有一本字典,代码将是相似的。

 var someDictionary = UserDefaults.standard.dictionary(forKey: "somekey") as? [String:String] ?? [:] 

如果你的原始对象只是一个string,那么你可以这样做:

 var someString = UserDefaults.standard.string(forKey: "somekey") ?? ""