无法将类型 String:NSObject 的值分配给类型 String:NSObject
Cannot assign value of type String:NSObject to type String:NSObject
我有一个 dictionary/array,看起来像这样:
var myArray: [[String:NSObject]] = []
let newItem = [
[
"caseNumber" : caseToAdd,
"formType" : formType,
"caseStatus" : caseStatus,
"caseDetails" : caseDetails,
"caseLUD" : caseLUD,
"friendlyName" : ""
]]
//Add new item to existing array
myArray += newItem
这很好用,我可以访问项目等。但现在我想将它保存到 NSUserDefaults,以便将来再次访问它。我可以很好地保存它,但是尝试再次加载它给我带来了一个问题:
myArray = HelperSavedData().loadMyCasesFromNSUserDefaults
这是 HelperSavedData class:
public class HelperSavedData {
let defaults = NSUserDefaults.standardUserDefaults()
public func saveMyCasesToNSUserDefaults(input:NSObject){
defaults.setObject(input, forKey: "myArray")
defaults.synchronize()
}
public func loadMyCasesFromNSUserDefaults() -> [[String:NSObject]]? {
if let savedArray = defaults.valueForKey("myArray") {
return ((savedArray) as! [[String : NSObject]])
}
return nil
}
}
但我收到错误消息:
Cannot assign value of type () -> [[String: NSObject]]? to type [[String: NSObject]]
您正在从 loadMyCasesFromNSUserDefaults()
返回一个 可选值 并尝试将其保存为 非可选值 。尝试像这样更改 myArray
声明
var myArray: [[String:NSObject]]?
loadMyCasesFromNSUserDefaults()
return [[String:NSObject]]?
是一个可选值,请尝试 var myArray?: [[String:NSObject]] = []
如果不进行一定程度的展开,您不能将可选类型分配给非可选类型。
您已将 myArray
定义为非可选字典数组。
var myArray: [[String:NSObject]] = []
变量,myArray
永远不能是nil
。
您已将 loadMyCasesFromNSUserDefaults()
定义为 return 一个可选的字典数组。
public func loadMyCasesFromNSUserDefaults() -> [[String:NSObject]]?
也就是说,这个方法可以 return nil
.
所以我们必须决定在如何处理我们的变量方面什么最有意义。允许将 nil
分配给我们的 myArray
变量有意义吗?如果是这样,请按照其他答案的建议将其设为可选:
var myArray: [[String:NSObject]]?
但也许 myArray
成为 nil
永远没有意义。在这种情况下,不要更改 myArray
的声明。相反,确定我们如何处理您的方法 returns nil
.
的情况
我们可以说...如果我们从方法加载一个非 nil 数组,我们只想分配给 myArray
:
var myArray = [[String:NSObject]]()
if let loadedArray = loadMyCasesFromNSUserDefaults() {
myArray = loadedArray
}
myArray += newItem
或者我们可以使用 Nil-Coalescing 运算符并将默认值分配给 myArray
if loadMyCasesFromNSUserDefaults()
returns nil
.
var myArray = loadMyCasesFromNSUserDefaults() ?? [newItem]
还有很多其他方法可以处理 nil
和可选值。
这里的关键是我们需要做出一些决定。
-
myArray
应该被允许成为 nil
吗?这有意义吗?
- 如果
myArray
不应该是 nil
,那么处理我们的方法 returns nil
的情况有什么意义?我们要如何处理?
我有一个 dictionary/array,看起来像这样:
var myArray: [[String:NSObject]] = []
let newItem = [
[
"caseNumber" : caseToAdd,
"formType" : formType,
"caseStatus" : caseStatus,
"caseDetails" : caseDetails,
"caseLUD" : caseLUD,
"friendlyName" : ""
]]
//Add new item to existing array
myArray += newItem
这很好用,我可以访问项目等。但现在我想将它保存到 NSUserDefaults,以便将来再次访问它。我可以很好地保存它,但是尝试再次加载它给我带来了一个问题:
myArray = HelperSavedData().loadMyCasesFromNSUserDefaults
这是 HelperSavedData class:
public class HelperSavedData {
let defaults = NSUserDefaults.standardUserDefaults()
public func saveMyCasesToNSUserDefaults(input:NSObject){
defaults.setObject(input, forKey: "myArray")
defaults.synchronize()
}
public func loadMyCasesFromNSUserDefaults() -> [[String:NSObject]]? {
if let savedArray = defaults.valueForKey("myArray") {
return ((savedArray) as! [[String : NSObject]])
}
return nil
}
}
但我收到错误消息:
Cannot assign value of type () -> [[String: NSObject]]? to type [[String: NSObject]]
您正在从 loadMyCasesFromNSUserDefaults()
返回一个 可选值 并尝试将其保存为 非可选值 。尝试像这样更改 myArray
声明
var myArray: [[String:NSObject]]?
loadMyCasesFromNSUserDefaults()
return [[String:NSObject]]?
是一个可选值,请尝试 var myArray?: [[String:NSObject]] = []
如果不进行一定程度的展开,您不能将可选类型分配给非可选类型。
您已将 myArray
定义为非可选字典数组。
var myArray: [[String:NSObject]] = []
变量,myArray
永远不能是nil
。
您已将 loadMyCasesFromNSUserDefaults()
定义为 return 一个可选的字典数组。
public func loadMyCasesFromNSUserDefaults() -> [[String:NSObject]]?
也就是说,这个方法可以 return nil
.
所以我们必须决定在如何处理我们的变量方面什么最有意义。允许将 nil
分配给我们的 myArray
变量有意义吗?如果是这样,请按照其他答案的建议将其设为可选:
var myArray: [[String:NSObject]]?
但也许 myArray
成为 nil
永远没有意义。在这种情况下,不要更改 myArray
的声明。相反,确定我们如何处理您的方法 returns nil
.
我们可以说...如果我们从方法加载一个非 nil 数组,我们只想分配给 myArray
:
var myArray = [[String:NSObject]]()
if let loadedArray = loadMyCasesFromNSUserDefaults() {
myArray = loadedArray
}
myArray += newItem
或者我们可以使用 Nil-Coalescing 运算符并将默认值分配给 myArray
if loadMyCasesFromNSUserDefaults()
returns nil
.
var myArray = loadMyCasesFromNSUserDefaults() ?? [newItem]
还有很多其他方法可以处理 nil
和可选值。
这里的关键是我们需要做出一些决定。
-
myArray
应该被允许成为nil
吗?这有意义吗? - 如果
myArray
不应该是nil
,那么处理我们的方法 returnsnil
的情况有什么意义?我们要如何处理?