模糊使用'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")
mutableCopy
是NSObject
的Objective-C方法。 在Swift 3中使用它几乎没有什么理由。
由于您正在处理UserDefaults
和mutableCopy
,您必须处理数组或字典。 或者它可能是一个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") ?? ""