两个答案都是正确的,但都不理想。
这可行:
for index in 0..<count {
但是,使用起来要好得多:
for index in Globals.datesArray.indicies
通过这种方式为您创建了范围,并消除了拼写错误的可能性(... 而不是..<)
附注:
我担心的是您使用 3 个数组来存储相关数据。维基百科有一个关于pros and cons of parallel arrays 的部分。它们在现代的高级编程中确实没有位置。它们使用起来很麻烦,而且非常脆弱。例如,如果您将一个元素添加到
datesArray 和titleArray,但是忘记在descriptionArray 中添加描述,突然之间,您的日期/标题和描述不匹配。
您应该尝试使用class or struct。例如,您可能需要这样的结构声明:
struct Thing { //TODO: give me a name!
let date: Date
let title: String
let description: String
}
这让你可以像这样改变一个凌乱的并行结构:
let datesArray = [date0, date1, date2]
let titlesArray = ["title0", "title1", "title2"]
let descriptionsArray = ["Description 0", "Description 1", "Description 2"]
变成这样:
let things = [
Thing(
date: date0,
title: "title0"
description: "Description 0"
),
Thing(
date: date1,
title: "title1"
description: "Description 1"
),
Thing(
date: date2,
title: "title2"
description: "Description 2"
),
]
使用第二个声明,与单个Thing 相关的所有信息都被内聚地存储。它使您可以更轻松地进行添加/编辑。无需再计算元素以确保它们排列整齐!
有了这样的结构,你的代码可以这样写:
let A4paperSize = CGSize(width: 595, height: 842)
let pdf = SimplePDF(pageSize: A4paperSize)
pdf.setContentAlignment(.center)
var sum = 0
for (index, thing) in things.enumerated() {
pdf.addText(thing.date)
pdf.addText(thing.title)
pdf.addText(thing.description)
sum += index
}
let pdfData = pdf.generatePDFdata()
那个 sn-p 使用enumerated(),它可以让你迭代元素及其索引。这样,我们就不必在循环体中下标我们的数组了。
但是,在这种情况下,sum 将始终是0, 1, ... , count 的总和。这等于只是(count * (count + 1)) / 2,所以我们可以进一步简化代码:
let A4paperSize = CGSize(width: 595, height: 842)
let pdf = SimplePDF(pageSize: A4paperSize)
pdf.setContentAlignment(.center)
for (index, thing) in things.enumerated() {
pdf.addText(thing.date)
pdf.addText(thing.title)
pdf.addText(thing.description)
}
let pdfData = pdf.generatePDFdata()
let sum = (count * (count + 1)) / 2
现在由于我们不再在for 循环体中使用index,我们可以使用常规迭代,而无需enumerated():
let A4paperSize = CGSize(width: 595, height: 842)
let pdf = SimplePDF(pageSize: A4paperSize)
pdf.setContentAlignment(.center)
for index in things {
pdf.addText(thing.date)
pdf.addText(thing.title)
pdf.addText(thing.description)
}
let pdfData = pdf.generatePDFdata()
let sum = (count * (count + 1)) / 2