根据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)
答案 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