【问题标题】:dynamically making nsarry from the static content in swift快速从静态内容中动态生成nsarry
【发布时间】:2015-08-24 06:41:49
【问题描述】:

我必须使用下面的代码 Objective C 使用代码来制作 NSArray

self.sampleData = @[ @{ @"description": @"Section A",
                      @"articles": @[ @{ @"title": @"Article A1" },
                                      @{ @"title": @"Article A2" },
                                      @{ @"title": @"Article A3" },
                                      @{ @"title": @"Article A4" },
                                      @{ @"title": @"Article A5" }
                                      ]
                      } ];

我怎么能用 swift 写同样的代码,太动态了,让我们在循环中说,我想初始化文章 A1,文章 A2 字符串,比如 5 个元素会有文章 5。

【问题讨论】:

  • 为什么显示 obj-c 代码不能回答您的问题?到目前为止,您针对循环的问题尝试了什么?
  • 对不起,我不知道该怎么做。如果我知道,我早就写好了
  • 从一个可变数组和一个循环开始,向其中添加内容,然后将其添加到其他内容中。试一试,展示你的尝试,如果你有问题,解释它做错了什么。

标签: ios arrays swift nsarray


【解决方案1】:

我不了解您的 Swift 知识,但这是一种按程序创建数组的方法:

// in Swift you are using the type Array instead of NSArray
var sampleData = [[String : AnyObject]]() // empty Array of dictionaries
sampleData["description"] = "Section A"

var articles = [[String : String]]() // empty Array of dictionaries

// is the same as   for var i = 1; i <= 5; i++ {
for i in 1...5 {
    let article = [String : String]()
    article["title"] = "Article A\(i)" // using String interpolation
    articles.append(dict)
}

// add articles to sampleData
sampleData["articles"] = articles

由于 Swifts 函数方法 map 你也可以重写为:

var sampleData = [[String : AnyObject]]() // empty Array of dictionaries
sampleData["description"] = "Section A"

let articles = (1...5).map{ Dictionary(dictionaryLiteral: ("title", "Article A\($0)")) }

// add articles to sampleData
sampleData["articles"] = articles

作为一般建议,如果您想将这样的数据结构用作存储,您应该考虑创建新的结构或类,例如 SectionArticle,以便让编译器检查更静态的编译器。

【讨论】:

    猜你喜欢
    • 2011-11-08
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    • 2016-03-20
    相关资源
    最近更新 更多