【问题标题】:swiftyJSON grab random index from ArrayswiftyJSON 从数组中抓取随机索引
【发布时间】: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] ... 等等,直到获得最终数组,然后在其上使用随机索引

标签: ios swift swifty-json


【解决方案1】:

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

var random = Int(arc4random_uniform(24))

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

【讨论】:

  • 头晕目眩!老实说,我以为我曾尝试将其转换为 Int && NSNumber && 几乎任何数字格式...谢谢 bud :)
  • NSNumber 是数字类型在 Objective-C 中不是对象这一事实的产物。如果不将数值转换为NSNumbers,就不能将数值放入NSArray。没有真正的理由在 Swift 中使用 NSNumbers。
猜你喜欢
  • 1970-01-01
  • 2014-04-21
  • 1970-01-01
  • 1970-01-01
  • 2019-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多