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"]]
我只是不知道该怎么做。我的计划是获取大量记录并将它们放入这个单一的巨大数组中(以便于使用 'value')是否有 easier/better 方法可以做到这一点?
对不起我的英语,不是我的母语。
感谢您的帮助!
当你遇到这样的问题时,制作一个游乐场并进行实验并进行一些思考。本质上,这就是您正在做的事情:
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]
我正在尝试创建一个包含多个数组的数组。 我正在使用 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"]]
我只是不知道该怎么做。我的计划是获取大量记录并将它们放入这个单一的巨大数组中(以便于使用 'value')是否有 easier/better 方法可以做到这一点?
对不起我的英语,不是我的母语。 感谢您的帮助!
当你遇到这样的问题时,制作一个游乐场并进行实验并进行一些思考。本质上,这就是您正在做的事情:
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]