【发布时间】:2018-01-09 19:52:12
【问题描述】:
与必须在 return 语句中指定每个部分相比,我如何最好地以编程方式将它传回 x 个部分?有没有办法循环和组合这些,然后为我的 UserSettings.Sections[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)
}
【问题讨论】:
-
您的意思是您想要一个
[ZendeskFaq]类型的Array,还是只想创建您的return 语句而不对函数调用进行硬编码? -
您可以使用 .flatmap 来加入嵌套数组。你可以像这样返回数组 'func this() -> [that] {}'
-
您可以执行
[[self.loadFAQs], UserSettings.Sections.map({ loadX(section: $0) })].flatMap({ $0 }),这只会为您提供一个包含上述所有内容的数组..但不清楚您真正想要什么.. -
对不起,这很难解释,但基本上我有三个数组(相同的数组格式)我要返回。每个都是一个部分,以便它们在带有部分的表格视图中分解。问题是 loadX 部分的数量会变化“x”,所以有一次我可能只有 LoadFAQs 和 2 个 loadX。下次运行应用程序时(基于对源数据的更改),我可能会使用 5 个或其他数量的 loadX 部分。我尝试了平面图,但出现了 sigbart 错误:return [[self.loadFAQs], UserSettings.Sections.map({ loadX(section: $0) })].flatMap({ $0 }) as! [Zendesk 常见问题解答]
-
或者我想我可以说每次加载表格时如何将数据添加到具有不同数量部分的表格中?我正在一次读取数据以计算这些数据。然后再次读取数据并加载到该部分的正确数组。将各个部分相加,然后显示在我的表格中。