Ios 如何以编程方式组合数组节?
与必须在return语句中指定每个部分相比,如何以编程方式将此消息传回x个部分?是否有一种方法可以循环并组合这些内容,然后以组合数组的形式返回my UserSettings.Sections[x] 我当前的返回声明:Ios 如何以编程方式组合数组节?,ios,arrays,swift,sections,Ios,Arrays,Swift,Sections,与必须在return语句中指定每个部分相比,如何以编程方式将此消息传回x个部分?是否有一种方法可以循环并组合这些内容,然后以组合数组的形式返回my UserSettings.Sections[x] 我当前的返回声明: return [self.loadFAQs(), self.loadX(section: UserSettings.Sections[0]), self.loadX(section: UserSettings.Sections[1])] class func getZendesk
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)
}
return[self.loadFAQs()、self.loadX(section:UserSettings.Sections[0])、self.loadX(section:UserSettings.Sections[1])]
类func getZendeskFAQs()->[ZendeskFaqs]{
//清仓
clearDataFAQs()
let count=loadArticles(标签:UserSettings.Sections)
打印(“加载的文章总数:”,计数)
//self.loadX节的数量会有所不同…如何执行此操作并返回?
return[self.loadFAQs()、self.loadX(section:UserSettings.Sections[0])、self.loadX(section:UserSettings.Sections[1])]
}
//标记-加载数据的私有方法
私有类func loadFAQs()->ZendeskFaqs{
var FAQ=[ZendeskFaq]()
附加(ZendeskFaq(标题为“faq 1.1”))
附加(ZendeskFaq(标题为:“faq 1.2”))
附加(ZendeskFaq(标题为“faq 1.3”))
返回ZendeskFAQ(部分:“设置1”,包括FAQ:FAQ)
}
私有类func loadX(部分:字符串)->ZendeskFAQ{
var FAQ=[ZendeskFaq]()
var myIndex=0
而myIndex
您需要学会使用Swift中提供的漂亮的收集方法,如map
、filter
和flatMap
。我建议至少在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
函数将其从一种类型转换为另一种类型。这就是如何将所有部分映射到ZendeskFAQ
对象中的方法,如我的代码示例所示
顺便说一句,您也不需要像使用myIndex
那样使用索引计数器。您可以简单地称之为:
for article in articleData {
if section == article.label_name {
...
}
}
您的意思是想要类型为
[ZendeskFaq]
的单个数组
,还是只想创建return语句而不硬编码函数调用?您可以.flatmap来加入嵌套数组。您可以返回类似“func this()->[that]{}”的数组,您可以执行[[self.loadFAQs],UserSettings.Sections.map({loadX(section:$0})])].flatMap({$0})
,这样只会得到一个包含上述所有内容的数组。。但不清楚你到底想要什么..抱歉,很难解释,但基本上我返回了三个数组(相同的数组格式)。每个部分都是一个部分,因此它们在带有部分的表视图中出现。问题是loadX部分的数量会随着“x”的变化而变化,因此一次我可能只有loadfaq和2个loadX。下次运行应用程序时(基于对源数据的更改),我可能需要5个或一些其他数量的loadX节。我尝试了flatmap,但出现了一个sigbart错误:return[[self.loadFAQs],UserSettings.Sections.map({loadX(section:$0)})]。flatmap({$0})as![ZendeskFAQ]或者我想我可以说,如何在每次加载表时向具有不同节数的表中添加数据?我正在一次读取数据,以计算这些数据。然后再次读取数据并加载到该部分的正确数组。将各部分相加,然后显示在我的表格中。