繁体   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