簡體   English   中英

Swift 2-創建數組數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM