处理混乱的快速选项

时间:2015-08-04 08:07:34

标签: swift

我正在编写一些非常简单的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()
    }
}

我错过了什么?

1 个答案:

答案 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,则为空字典[:]