- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在返回此处找到的 Glassdoor API 时遇到一些困难 https://www.glassdoor.com/developer/companiesApiActions.htm
如何以 JSON 格式返回整个公司,以便我可以显示公司信息以及 ceo 信息。
到目前为止,我可以显示公司信息,但无法访问 Ceo 数据和 featureReview 数据。
这就是我发出请求的方式,但不会完全以 JSON 形式返回结果。
Alamofire.request(glassdoorURL).responseJSON { (response) in
print("================")
//if let JSON = response.result.value as? [String:AnyObject] {
//dictionary
//print("JSON: \(JSON)")
//let employers = JSON["response"]!["employers"]!! as [[String:AnyObject]]
if let JSON = response.result.value as? [String:Any] { //dictionary
if let resp = JSON["response"] as?[String:Any] { //dictionary
let employers = resp["employers"] as?[[String:Any]] //array
print("Employers: \(employers!)")
self.companies = self.filterCompanies(companyArray: employers!)
//takes the company and puts it into an array to display to a table
self.researchTableView.reloadData()
}
//}
}
print("================")
}
这是我的数据模型。
final class GlassdoorCompany: NSObject {
var name: String?
var websiteURL: String?
var industry: String?
var logo: String?
var overallRating: String?
var ceo: Ceo?
var featuredReview: FeaturedReview?
init(fromJSON json: NSDictionary) {
if let nameStr = json["name"] as? String {
self.name = nameStr
}
if let websiteURLStr = json["website"] as? String {
self.websiteURL = websiteURLStr
}
if let industryStr = json["industry"] as? String {
self.industry = industryStr
}
if let logoStr = json["squareLogo"] as? String {
self.logo = logoStr
}
if let overallRatingStr = json["overallRating"] as? String {
self.overallRating = overallRatingStr
}
if let ceoStr = json["ceo"] as? Ceo {
self.ceo = ceoStr
}
if let featuredReviewStr = json["featuredReview"] as?
FeaturedReview {
self.featuredReview = featuredReviewStr
}
}
final class Ceo: NSObject {
var name: String?
var image: ceoImage?
var approvalRating: Int?
var disapprovalRating: Int?
var totalRatings: Int?
init?(fromJSON json: NSDictionary){
if let nameStr = json["name"] as? String {
self.name = nameStr
}
if let imageStr = json["image"] as? ceoImage {
self.image = imageStr
}
if let approvalRatingStr = json["pctApprove"] as? Int {
self.approvalRating = approvalRatingStr
}
if let disapprovalRatingStr = json["pctDisapprove"] as? Int {
self.disapprovalRating = disapprovalRatingStr
}
if let totalRatingsStr = json["numberOfRatings"] as? Int {
self.totalRatings = totalRatingsStr
}
}
final class ceoImage: NSObject {
var height: Int?
var src: String?
var width: Int?
init?(fromJSON json: NSDictionary) {
if let heightStr = json["height"] as? Int {
self.height = heightStr
}
if let srcStr = json["src"] as? String {
self.src = srcStr
}
if let widthStr = json["width"] as? Int {
self.width = widthStr
}
}
final class FeaturedReview {
var currentJob: Bool?
var reviewDate: String?
var jobTitle: String?
var location: String?
var headline: String?
var pros: String?
var cons: String?
var overallRating: Int?
init?(fromJSON json: NSDictionary) {
if let currentJobStr = json["currentJob"] as? Bool {
self.currentJob = currentJobStr
}
if let reviewDateStr = json["reviewDateTime"] as? String {
self.reviewDate = reviewDateStr
}
if let jobTitleStr = json["jobTitle"] as? String {
self.jobTitle = jobTitleStr
}
if let locationStr = json["location"] as? String {
self.location = locationStr
}
if let headlineStr = json["headline"] as? String {
self.headline = headlineStr
}
if let prosStr = json["pros"] as? String {
self.pros = prosStr
}
if let consStr = json["cons"] as? String {
self.cons = consStr
}
if let overallRatingStr = json["overall"] as? Int {
self.overallRating = overallRatingStr
}
}
最佳答案
您遇到的问题是不可能直接将 json 对象直接转换为 swift 类。那么 json["ceo"] 为? Ceo
和 json["featuredReview"] 作为? FeaturedReview
只是返回 nil
。因此,您需要更改类初始化的方式。
我已经重写了您的 Ceo
和 CeoImage
类以使其正常工作,您只需要在此基础上修复 FeaturedReview
即可。我还添加了一个 Swift 4 Codable 示例,我建议您学习使用它,因为它现在变得非常流行并且简单得多。
实现下面的新 Ceo
模型后,进行更改
if let ceoStr = json["ceo"] as? Ceo {
self.ceo = ceoStr
}
至
if let ceoStr = Ceo(json["ceo"] as? Dictionary<String,Any>) {
self.ceo = ceoStr
}
您需要解决的问题
struct Ceo {
let name: String
let image: CeoImage
let approvalRating: Int
let disapprovalRating: Int
let totalRatings: Int
init?(_ dict: Dictionary<String,Any>?){
guard
let name = dict["name"] as? String,
let image = CeoImage(dict["image"] as? Dictionary<String,Any>),
let approvalRating = dict["pctApprove"] as? Int,
let disapprovalRating = dict["pctDisapprove"] as? Int,
let totalRatings = dict["numberOfRatings"] as? Int
else {
return nil
}
self.name = name
self.image = image
self.approvalRating = approvalRating
self.disapprovalRating = disapprovalRating
self.totalRatings = totalRatings
}
}
struct CeoImage {
let height: Int
let src: String
let width: Int
init?(_ dict: Dictionary<String,Any>?) {
guard
let height = dict?["height"] as? Int,
let src = dict?["src"] as? String,
let width = dict?["width"] as? Int
else {
return nil
}
self.height = height
self.src = src
self.width = width
}
}
Swift 4 可编码示例
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
Alamofire.request(glassdoorURL).responseJSON { (response) in
// We need to extract the `response` data from the json and convert
// it back to `Data` for the JSONDecoder
guard
let dict = response.result.value as? Dictionary<String,Any>,
let responseData = dict["response"] as? Dictionary<String,Any>,
let json = JSONSerialization.data(withJSONObject: responseData)
else {
return
}
do {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SS"
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .formatted(dateFormatter)
let company = try decoder.decode(Company.self, from: json)
dump(company)
} catch {
print("\n(error)\n")
}
}
}
}
型号
struct Company: Codable {
let employers: Array<Employer>
}
struct Employer: Codable {
let name: String
let website: URL
let industry: String
let squareLogo: URL
let overallRating: Int
let ceo: CEO
let featuredReview: FeaturedReview
}
struct CEO: Codable {
struct CEOImage: Codable {
let src: URL
let height: Int
let width: Int
}
let name: String
let title: String
let image: CEOImage
let numberOfRatings: Int
let pctApprove: Int
let pctDisapprove: Int
}
struct FeaturedReview : Codable {
let id: Int
let currentJob: Bool
let reviewDateTime: Date
let jobTitle: String
let location: String
let headline: String
let pros: String
let cons: String
}
关于ios - 如何以 JSON 格式返回 Glassdoor API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47103909/
IO 设备如何知道属于它的内存中的值在memory mapped IO 中发生了变化? ? 例如,假设内存地址 0 专用于保存 VGA 设备的背景颜色。当我们更改 memory[0] 中的值时,VGA
我目前正在开发一个使用Facebook sdk登录(通过FBLoginView)的iOS应用。 一切正常,除了那些拥有较旧版本的facebook的人。 当他们按下“使用Facebook登录”按钮时,他
假设我有: this - is an - example - with some - dashesNSRange将使用`rangeOfString:@“-”拾取“-”的第一个实例,但是如果我只想要最后
Card.io SDK提供以下详细信息: 卡号,有效期,月份,年份,CVV和邮政编码。 如何从此SDK获取国家名称。 - (void)userDidProvideCreditCardInfo:(Car
iOS 应用程序如何从网络服务下载图片并在安装过程中将它们安装到用户的 iOS 设备上?可能吗? 最佳答案 您无法控制应用在用户设备上的安装,因此无法在安装过程中下载其他数据。 只需在安装后首次启动应
我曾经开发过一款企业版 iOS 产品,我们公司曾将其出售给大型企业,供他们的员工使用。 该应用程序通过 AppStore 提供,企业用户获得了公司特定的配置文件(包含应用程序配置文件)以启用他们有权使
我正在尝试将 Card.io SDK 集成到我的 iOS 应用程序中。我想为 CardIO ui 做一个简单的本地化,如更改取消按钮标题或“在此保留信用卡”提示文本。 我在 github 上找到了这个
我正在使用 CardIOView 和 CardIOViewDelegate 类,没有可以设置为 YES 的 BOOL 来扫描 collectCardholderName。我可以看到它在 CardIOP
我有一个集成了通话工具包的 voip 应用程序。每次我从我的 voip 应用程序调用时,都会在 native 电话应用程序中创建一个新的最近通话记录。我在 voip 应用程序中也有自定义联系人(电话应
iOS 应用程序如何知道应用程序打开时屏幕上是否已经有键盘?应用程序运行后,它可以接收键盘显示/隐藏通知。但是,如果应用程序在分屏模式下作为辅助应用程序打开,而主应用程序已经显示键盘,则辅助应用程序不
我在模拟器中收到以下错误: ImageIO: CGImageReadSessionGetCachedImageBlockData *** CGImageReadSessionGetCachedIm
如 Apple 文档所示,可以通过 EAAccessory Framework 与经过认证的配件(由 Apple 认证)进行通信。但是我有点困惑,因为一些帖子告诉我它也可以通过 CoreBluetoo
尽管现在的调试器已经很不错了,但有时找出应用程序中正在发生的事情的最好方法仍然是古老的 NSLog。当您连接到计算机时,这样做很容易; Xcode 会帮助弹出日志查看器面板,然后就可以了。当您不在办公
在我的 iOS 应用程序中,我定义了一些兴趣点。其中一些有一个 Kontakt.io 信标的名称,它绑定(bind)到一个特定的 PoI(我的意思是通常贴在信标标签上的名称)。现在我想在附近发现信标,
我正在为警报提示创建一个 trigger.io 插件。尝试从警报提示返回数据。这是我的代码: // Prompt + (void)show_prompt:(ForgeTask*)task{
您好,我是 Apple iOS 的新手。我阅读并搜索了很多关于推送通知的文章,但我没有发现任何关于 APNS 从 io4 到 ios 6 的新更新的信息。任何人都可以向我提供 APNS 如何在 ios
UITabBar 的高度似乎在 iOS 7 和 8/9/10/11 之间发生了变化。我发布这个问题是为了让其他人轻松找到答案。 那么:在 iPhone 和 iPad 上的 iOS 8/9/10/11
我想我可以针对不同的 iOS 版本使用不同的 Storyboard。 由于 UI 的差异,我将创建下一个 Storyboard: Main_iPhone.storyboard Main_iPad.st
我正在写一些东西,我将使用设备的 iTunes 库中的一部分音轨来覆盖 2 个视频的组合,例如: AVMutableComposition* mixComposition = [[AVMutableC
我创建了一个简单的 iOS 程序,可以顺利编译并在 iPad 模拟器上运行良好。当我告诉 XCode 4 使用我连接的 iPad 设备时,无法编译相同的程序。问题似乎是当我尝试使用附加的 iPad 时
我是一名优秀的程序员,十分优秀!