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 中不是对象这一事实的产物。如果不将数值转换为NSNumber
s,就不能将数值放入NSArray
。没有真正的理由在 Swift 中使用 NSNumber
s。以上是关于swiftyJSON 从数组中抓取随机索引的主要内容,如果未能解决你的问题,请参考以下文章
如何从数组中抓取一个随机元素而不多次抓取同一个元素? [复制]