if语句导致未解析的标识符

时间:2016-12-29 02:24:43

标签: swift if-statement

根据Xcode,"查询"在云套件执行功能提醒我"查询"是一个未解决的标识符。我知道这个问题围绕着if语句,因为如果" query"由一种记录类型明确定义。但是,当我考虑所有潜在的查询时,我不明白为什么在这种情况下查询没有得到解决。

 if newindex.row == 5
    {
        let query = CKQuery(recordType: "mexican", predicate: predicate)
    }
    if newindex.row == 6
    {
        let query = CKQuery(recordType: "seafood", predicate: predicate)
    }
    else if newindex.row == 7
    {
        let query = CKQuery(recordType: "steakhouses", predicate: predicate)
    }


    publicDB.perform(query, inZoneWith: nil)

3 个答案:

答案 0 :(得分:1)

如果您希望在{-0}}之外可以访问它,则必须在if语句之外声明query。您的if-chain也可以用更干净的switch语句替换。例如:

let query: CKQuery

switch newindex.row {
    case 5: query = CKQuery(recordType: "mexican", predicate: predicate)
    case 6: query = CKQuery(recordType: "seafood", predicate: predicate)
    case 7: query = CKQuery(recordType: "steakhouses", predicate: predicate)
    default: preconditionFailure("unreachable")
}

publicDB.perform(query, inZoneWith: nil)

答案 1 :(得分:0)

您可以在if范围之外声明变量,并在if语句中对其进行修改。

var query = nil
if newindex.row == 5 {
    query = CKQuery(recordType: "mexican", predicate: predicate)
} else if newindex.row == 6 {
    query = CKQuery(recordType: "seafood", predicate: predicate)
} else if newindex.row == 7 {
    query = CKQuery(recordType: "steakhouses", predicate: predicate)
}

if let query = query { // unwrap the nilable variable
    publicDB.perform(query, inZoneWith: nil)
}

答案 2 :(得分:0)

我只是想为以下问题提供一个简洁的一般答案:

  

但是,当所有潜在查询都考虑在内时,我不明白为什么在这种情况下无法解决查询。

很明显,我经常用其他语言来进行这种设置,我很生气,Swift似乎不支持它。

我也不确定是否可以在if / else块上方声明变量,所以我不能使用let使变量不可变。

因此,令我惊喜的是,定义不带值的变量类型仍然允许在if / else块中设置变量并保持不变性:

let foo: String

if true {
    foo = "bar"
} else {
    foo = "che"
}

foo = "baz" // ERROR: immutable value 'foo' may only be initialized once