[英]Swift 2 - Create a array of arrays
我正在嘗試制作一個包含多個數組的數組。 我正在使用CloudKit來獲取數據。
import UIKit
import CloudKit
var questionsCount = 0
var questionsArray = [String]()
class hvadvilduhelstViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//firstfield.setTitle("Klik her for at starte!", forState: .Normal)
//secondfield.setTitle("Klik her for at starte!", forState: .Normal)
firstfield.titleLabel?.lineBreakMode = NSLineBreakMode.ByWordWrapping
firstfield.titleLabel?.textAlignment = NSTextAlignment.Center
secondfield.titleLabel?.lineBreakMode = NSLineBreakMode.ByWordWrapping
secondfield.titleLabel?.textAlignment = NSTextAlignment.Center
let container = CKContainer.defaultContainer()
let publicData = container.publicCloudDatabase
let query = CKQuery(recordType: "Questions", predicate: NSPredicate(format: "TRUEPREDICATE", argumentArray: nil))
publicData.performQuery(query, inZoneWithID: nil) { results, error in
if error == nil { // There is no error
for entry in results! {
let firstOne = [entry["Question1"] as! String]
let secondOne = firstOne + [entry["Question2"] as! String]
let thirdOne = secondOne + [String(entry["Question1Rating"] as! Int)]
let fourthOne = thirdOne + [String(entry["Question2Rating"] as! Int)]
let fithOne = fourthOne + [String(entry["Reports"] as! Int)]
questionsArray = questionsArray + fithOne
print(questionsArray)
}
}
else {
print(error)
}
}
}
使用以前的代碼,我在控制台輸出中得到了這個:
["Dette er en test1", "Dette er en test2", "0", "0", "0", "test2", "test2", "0", "0", "0"]
而不是這個(這是我想要的輸出):
[["Dette er en test1", "Dette er en test2", "0", "0", "0"], ["test2", "test2", "0", "0", "0"]]
我簡直不知道該怎么做。 我的計划是獲取大量記錄,並將它們放入單個龐大的數組中(以使其易於使用“值”)。是否有更簡單/更好的方法來做到這一點?
對不起,我的英語不是我的母語。 謝謝你的幫助!
當您遇到這樣的問題時,請創建一個Playground並進行實驗,並進行一些思考。 本質上,這是您在做什么:
var arr = [String]()
for _ in (1...3) {
let first = ["Mannie"]
let second = first + ["Moe"]
let third = second + ["Jack"]
arr = arr + third
}
arr // ["Mannie", "Moe", "Jack", "Mannie", "Moe", "Jack", "Mannie", "Moe", "Jack"]
那不是您想要的,所以不要那樣做。 首先,正如問題標題所說,您需要一個數組數組。 那么,您不想以[String]
結尾; 您剛剛告訴我們,您想要[[String]]
(字符串數組的數組)! 因此,首先進行更改:
var arr = [[String]]()
現在,當您構建數組並將其插入到數組數組中時,請使用append
方法(而不是+
運算符):
arr.append(third)
結果如下:
var arr = [[String]]()
for _ in (1...3) {
let first = ["Mannie"]
let second = first + ["Moe"]
let third = second + ["Jack"]
arr.append(third)
}
arr // [["Mannie", "Moe", "Jack"], ["Mannie", "Moe", "Jack"], ["Mannie", "Moe", "Jack"]]
現在去吧,在您的真實代碼中也這樣做。
嘗試以下方法:
import UIKit
import CloudKit
var questionsCount = 0
var questionsArray = [[String]]()
class hvadvilduhelstViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//firstfield.setTitle("Klik her for at starte!", forState: .Normal)
//secondfield.setTitle("Klik her for at starte!", forState: .Normal)
firstfield.titleLabel?.lineBreakMode = NSLineBreakMode.ByWordWrapping
firstfield.titleLabel?.textAlignment = NSTextAlignment.Center
secondfield.titleLabel?.lineBreakMode = NSLineBreakMode.ByWordWrapping
secondfield.titleLabel?.textAlignment = NSTextAlignment.Center
let container = CKContainer.defaultContainer()
let publicData = container.publicCloudDatabase
let query = CKQuery(recordType: "Questions", predicate: NSPredicate(format: "TRUEPREDICATE", argumentArray: nil))
publicData.performQuery(query, inZoneWithID: nil) { results, error in
if error == nil { // There is no error
for entry in results! {
let firstOne = entry["Question1"] as! String
let secondOne = entry["Question2"] as! String
let thirdOne = String(entry["Question1Rating"] as! Int)
let fourthOne = String(entry["Question2Rating"] as! Int)
let fifthOne = String(entry["Reports"] as! Int)
questionsArray.append([firstOne, secondOne, thirdOne, fourthOne, fifthOne])
print(questionsArray)
}
}
else {
print(error)
}
}
}
}
值得注意的是, questionsArray
現在的類型為[[String]]
,而不僅僅是[String]
,並且對於每個entry
,您都希望添加一個新的[String]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.