swift 中的 If 语句

If statements in swift

我是 swift 的新手,正在尝试理解我正在阅读的这段代码。有人可以解释设置私人搜索词典的 if 语句吗?另外,语句对 as [String : String] 是什么意思?我对这个术语感到困惑 as.Also 我不明白如果你声明一个常量而不比较它,if 语句是如何执行的? if 语句不应该检查某些东西然后如果是真的就执行下面的代码吗?

import Foundation

// delegate protocol enables Model to notify controller when data changes 
protocol ModelDelegate {
    func modelDataChanged()
}

// this will manage the saved searches
class Model {
    // keys used for storing the app's data in app's NSUserDefaults
    private let pairsKey = "TwitterSearchesKVPairs"
    private let tagsKey = "TwitterSearchesKeyOrder"

    private var searches: Dictionary <String, String> = [:] // stores tag-query pairs
    private var tags: Array<String> = [] // stores tags in user-specified order

    private let delegate: ModelDelegate // delegate is MasterViewController

    // initializes the Model object aka constructor 
    init(delegate: ModelDelegate) {
        self.delegate = delegate

        // get the NSUserDefaults object for the app
        let userDefaults = NSUserDefaults.standardUserDefaults()

        // get Dictionary of the app's tag-query pairs
        if let pairs = userDefaults.dictionaryForKey(pairsKey) {
            self.searches = pairs as [String : String]
        }

        // get Array with the app's tag order
        if let tags = userDefaults.arrayForKey(tagsKey) {
            self.tags = tags as [String]
        }

"if let" 用于有条件的解包,用于安全地解包可选值。 "as" 用于转换,但在这种情况下您需要使用 as? (有条件的铸造)。如果需要,您可以将两者结合在一个句子中:

// get Dictionary of the app's tag-query pairs

if let pairs = userDefaults.dictionaryForKey(pairsKey) {
    self.searches = pairs as [String : String]
}
// get Array with the app's tag order
if let tags = userDefaults.arrayForKey(tagsKey) {
    self.tags = tags as [String]
}

也可以写成:

if let searches = NSUserDefaults.standardUserDefaults().dictionaryForKey(pairsKey) as? [String : String] {
    println(searches.description)
}

if let tags = NSUserDefaults.standardUserDefaults().arrayForKey(tagsKey) as? [String] {
    println(tags.description)
}


// [String : String]  means a Dictionary where its keys and values are String types

NSUserDefaults.standardUserDefaults().setObject(["book":"brown","car":"black"], forKey: "searches")

if let searches = NSUserDefaults.standardUserDefaults().dictionaryForKey("searches") as? [String : String] {
    println(searches["book"]!)  // "brown"
    println(searches["car"]!)   // "black"
}