2016-12-29 7 views
0

Xcodeによれば、クラウドキットの「クエリ」は機能を実行し、「クエリ」は未解決の識別子であることを警告します。私はこの問題がifステートメントの周りを回っていることを知っています。なぜなら、このコードは "query"が1つのレコードタイプによって明確に定義されている場合に機能するからです。しかし、すべての潜在的なクエリーが考慮されているこの状況で、なぜクエリーが解決されないのか分かりません。未解決の識別子につながるif文

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

'query'が範囲外です。 –

+1

これは、if文の外部でクエリを定義していないためにクエリが未定義になることがあるためです(たとえば、newindex.rowが8の場合など)。 – kbunarjo

+0

この未定義スコープの問題を修正するにはどうすればよいですか? –

答えて

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) 
} 
1

は、外側にアクセス可能にする場合は、if-statementの外側に宣言する必要があります。 ifチェーンは、よりクリーンな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) 
関連する問題