swiftyJSON 从数组中抓取随机索引

Posted

技术标签:

【中文标题】swiftyJSON 从数组中抓取随机索引【英文标题】:swiftyJSON grab random index from Array 【发布时间】:2016-11-30 23:45:56 【问题描述】:

键“children”中包含的数组包含 100 项。

是否可以告诉 SwiftyJSON 获取随机索引?我尝试创建一个随机数

var random = arc4random_uniform(24)

但是当我随机插入时,我得到了错误:

“不能用'UInt32'类型的索引为'JSON'类型的值下标”

我也将它转换为 NSNumber 和同样的东西,我完全迷路了。

func getBackgoundImageData(completed: @escaping DownloadComplete) 

    let imageURL = URL(string: IMAGE_URL)!
    Alamofire.request(imageURL).responseJSON  response in

        switch response.result 

        case .success(let value):

            let json = JSON(value)
            if let url = json["data"]["children"][0]["data"]["preview"]["images"][0]["source"]["url"].string 
                self._backgroundImageURL = url
            

        case .failure(let error):
            print(error)
        
        completed()
       

【问题讨论】:

一般来说,当你使用["data"]["children"][0]["data"]["preview"]["images"][0]["source"]["url"] 之类的东西时,你会遇到问题,因为 Swift 可能无法正确推断所有这些访问的类型。将此行拆分为一系列条件向下转换if let data = json["data"] as [String:Any] ... 等等,直到获得最终数组,然后在其上使用随机索引 【参考方案1】:

arc4random_uniform 函数的输入和返回值都是 UInt32。 Swift 对数字类型很挑剔,不会像 C 家族语言那样默默地在它们之间进行转换。你应该把随机的自我投射到一个 Int 上:

var random = Int(arc4random_uniform(24))

(正如 Paul 在评论中所说,您需要将索引分解为数据结构。)

【讨论】:

头晕目眩!老实说,我以为我曾尝试将其转换为 Int && NSNumber && 几乎任何数字格式...谢谢 bud :) NSNumber 是数字类型在 Objective-C 中不是对象这一事实的产物。如果不将数值转换为NSNumbers,就不能将数值放入NSArray。没有真正的理由在 Swift 中使用 NSNumbers。

以上是关于swiftyJSON 从数组中抓取随机索引的主要内容,如果未能解决你的问题,请参考以下文章

如何从数组中抓取一个随机元素而不多次抓取同一个元素? [复制]

如何从随机网页中抓取文本和图像?

使用swiftyjson从索引对象数组ios中检索json的标题

抓取随机行,同时保持其他表的顺序

php mysql 查询

如何从一个随机网站上抓取所有产品?