2016-09-01 3 views
0

addBoundry(CLLocation)関数を呼び出そうとしていますが、 "Type [CKRecord]に添字のメンバーがありません"というエラーが表示されます。どのように私は個々のレコードごとに関数を呼び出すことができます。swift関数の配列から個々のckrecordsを使用する際の問題

func loadLocation(completion: (error:NSError?, records:[CKRecord]?) -> Void) 
    { 
     let query = CKQuery(recordType: "Location", predicate: NSPredicate(value: true)) 
     CKContainer.defaultContainer().publicCloudDatabase.performQuery(query, inZoneWithID: nil){ 
      (records, error) in 
      if error != nil { 
       print("error fetching locations: \(error)") 
       completion(error: error, records: nil) 
      } else { 
       print("found locations: \(records)") 
       completion(error: nil, records: records) 
       for(var i = 0; i<records!.count; i += 1) 
       { 
        addBoundry(records[i]) 
       } 
      } 
     } 
    } 

答えて

1

質問に間違いがあります。

あなたはほぼ確実に実際になっていたエラーは次のとおりです

Type '[CKRecord]?' has no subscript members

そして、あなたの問題への手掛かりは、エラーメッセージです。 ?は、配列(オプション)を持っていることを示します。この場合、展開する必要があります。

guard let records = records else { 
    // handle error in here 
} 
// after this point, `records` is a [CKRecord], not a [CKRecord]? 

Swift Programming Language documentation on Optionalsを読むことを強くお勧めします。

またSwift 3はループのCスタイルを取り除くため、Swift 2.xを使用していると仮定します。レコードをループする簡単な方法(Swiftの両方のバージョン):

for record in records { 
    // do something with each record 
} 
+0

ありがとうございます。 CKRecordをCLLocationに変換するにはどうすればいいですか?@breakingobstacles – Steve

+0

@Caleb:それは別の話題なので、新しい質問の良い候補になります。 – breakingobstacles

関連する問題