如何以编程方式组合数组部分?



如何最好地以编程方式将其传回 x 个部分,而不是必须在 return 语句中指定每个部分?有没有办法循环和组合这些,然后返回我的UserSettings.Section[x]的组合数组?

我目前的退货声明:

return [self.loadFAQs(), self.loadX(section: UserSettings.Sections[0]), self.loadX(section: UserSettings.Sections[1])]
class func getZendeskFAQs() -> [ZendeskFaqs] {
// Clear storage
clearDataFAQs()
let count = loadArticles(labels: UserSettings.Sections)
print("total articles loaded: ", count)
// the number of self.loadX sections will vary... how do I do this and return?
return [self.loadFAQs(), self.loadX(section: UserSettings.Sections[0]), self.loadX(section: UserSettings.Sections[1])]

}
// MARK - Private methods to load data
private class func loadFAQs() -> ZendeskFaqs {
var faqs = [ZendeskFaq]()
faqs.append(ZendeskFaq(titled: "faq 1.1"))
faqs.append(ZendeskFaq(titled: "faq 1.2"))
faqs.append(ZendeskFaq(titled: "faq 1.3"))
return ZendeskFaqs(section: "Set 1", includeFAQs: faqs)
}
private class func loadX(section: String) -> ZendeskFaqs {
var faqs = [ZendeskFaq]()
var myIndex = 0
while myIndex < articleData.count {
if section == articleData[myIndex].label_name {
faqs.append(ZendeskFaq(titled: articleData[myIndex].title))
}
myIndex = myIndex + 1
}
return ZendeskFaqs(section: section, includeFAQs: faqs)
}

你需要学习使用 Swift 中为集合提供的漂亮方法,比如mapfilterflatMap。我建议阅读这些,至少在 Xcode 中提供的文档。

试试这个代码:

class func getZendeskFAQs() -> [ZendeskFaqs] {
// Clear storage
clearDataFAQs()
let count = loadArticles(labels: UserSettings.Sections)
print("total articles loaded: ", count)
return [self.loadFAQs()] + UserSettings.Sections.map { self.loadX(section: $0) }
}
// MARK - Private methods to load data
private class func loadFAQs() -> ZendeskFaqs {
var faqs = [ZendeskFaq]()
faqs.append(ZendeskFaq(titled: "faq 1.1"))
faqs.append(ZendeskFaq(titled: "faq 1.2"))
faqs.append(ZendeskFaq(titled: "faq 1.3"))
return ZendeskFaqs(section: "Set 1", includeFAQs: faqs)
}
private class func loadX(section: String) -> ZendeskFaqs {
let faqs = articleData
.flatMap { article -> ZendeskFaq? in
guard section == article.label_name else {
return nil
}
return ZendeskFaq(titled: article.title)
}
return ZendeskFaqs(section: section, includeFAQs: faqs)
}

为了获取数组中的所有元素,您可以使用map函数将其从一种类型转换为另一种类型。这是将所有部分映射到ZendeskFaqs对象中的方式,如我的代码示例所示。

顺便说一下,您也不需要像使用myIndex那样使用索引计数器。您可以简单地调用以下内容:

for article in articleData {
if section == article.label_name {
...
}
}

最新更新