Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何以编程方式组合数组节?_Ios_Arrays_Swift_Sections - Fatal编程技术网

Ios 如何以编程方式组合数组节?

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语句中指定每个部分相比,如何以编程方式将此消息传回x个部分?是否有一种方法可以循环并组合这些内容,然后以组合数组的形式返回my 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)
}
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]或者我想我可以说,如何在每次加载表时向具有不同节数的表中添加数据?我正在一次读取数据,以计算这些数据。然后再次读取数据并加载到该部分的正确数组。将各部分相加,然后显示在我的表格中。