我正在编写一些应该非常简单的 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()
}
}
我错过了什么?
最佳答案
可以简化为
if let db = NSKeyedUnarchiver.unarchiveObjectWithFile(databasePath) as? [String : [AnyObject]] {
database = db
} else {
database = [:]
}
甚至是单个语句,使用“nil-coalescing operator”??
:
database = NSKeyedUnarchiver.unarchiveObjectWithFile(databasePath) as? [String : [AnyObject]] ?? [:]
这计算出第一个表达式
NSKeyedUnarchiver.unarchiveObjectWithFile(databasePath) as? [String : [AnyObject]]
如果那不是nil
,否则到空字典[:]
。
关于swift - 处理困惑的 swift optionals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31803897/