我正在编写一些非常简单的Swift代码:初始化数据库类,如果可用则从文件加载数据,否则返回空数据库。
问题是,我的代码看起来过于复杂,我认为可能有更好的方法来处理我看不到的可选值。
以下是我如何做以及我希望如何:
我的工作方式
class Database: NSObject
{
private var database: [String: [AnyObject]]
private var databasePath: String
init(databasePath: String)
{
self.databasePath = databasePath
if let db1 = NSKeyedUnarchiver.unarchiveObjectWithFile(databasePath)
{
if let db2 = db1 as? [String : [AnyObject]]
{
database = db2
}
else
{
database = [String: [AnyObject]]()
}
}
else
{
database = [String: [AnyObject]]()
}
super.init()
}
}
我希望如何
class Database: NSObject
{
private var database: [String: [AnyObject]]
private var databasePath: String
init(databasePath: String)
{
self.databasePath = databasePath
if !(let database = NSKeyedUnarchiver.unarchiveObjectWithFile(databasePath) as? [String : [AnyObject]])
{
database = [String: [AnyObject]]()
}
super.init()
}
}
我错过了什么?
答案 0 :(得分:4)
您可以将其简化为
if let db = NSKeyedUnarchiver.unarchiveObjectWithFile(databasePath) as? [String : [AnyObject]] {
database = db
} else {
database = [:]
}
甚至是一个声明,使用" nil-coalescing运算符" ??
:
database = NSKeyedUnarchiver.unarchiveObjectWithFile(databasePath) as? [String : [AnyObject]] ?? [:]
这将评估第一个表达式
NSKeyedUnarchiver.unarchiveObjectWithFile(databasePath) as? [String : [AnyObject]]
如果不是nil
,则为空字典[:]
。