gpt4 book ai didi

ios - 在 Swift 3 中读取 JSON 文件时出错

转载 作者:搜寻专家 更新时间:2023-11-01 07:20:00 24 4
gpt4 key购买 nike

我在 swift 2.2 中的所有项目中都使用了这段代码,但是当我在将 xcode 更新为 xcode 8 后创建新项目时,我在使用这段代码读取 JSON 文件时遇到了这个问题

 do {


let comURL = "mylinkhere"+"customer_key=\(self.customer_key)"


// NSLog("PostData: %@",post)

let regURL:NSURL = NSURL(string: comURL)!


//let postData:NSData = post.dataUsingEncoding(NSASCIIStringEncoding)!

//let postLength:NSString = String( postData.length )

let request:NSMutableURLRequest = NSMutableURLRequest(url: regURL as URL)
request.httpMethod = "POST"
//request.HTTPBody = postData
//request.setValue(postLength as String, forHTTPHeaderField: "Content-Length")
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.setValue("application/json", forHTTPHeaderField: "Accept")

var reponseError: NSError?
var response: URLResponse?

var urlData: NSData?

do {
urlData = try NSURLConnection.sendSynchronousRequest(request as URLRequest, returning:&response) as NSData?
// print(urlData)
} catch let error as NSError {
reponseError = error
urlData = nil
}

if ( urlData != nil ) {

let res = response as! HTTPURLResponse!;

//NSLog("Response code: %ld", res?.statusCode);

if ((res?.statusCode)! >= 200 && (res?.statusCode)! < 300)
{
let responseData:NSString = NSString(data:urlData! as Data, encoding:String.Encoding.utf8.rawValue)!

NSLog("Response Data ==> %@", responseData );

//var error: NSError?

let jsonData = try JSONSerialization.jsonObject(with: urlData! as Data, options: .allowFragments) as! [String:AnyObject]




self.Appstatus = (jsonData as AnyObject).value("android_app_status") as! NSString



self.StreamURL = (jsonData as AnyObject).value("android_streaming_url") as! NSString

//[jsonData[@"success"] integerValue];

// NSLog("App Status2: %@", self.Appstatus);
// NSLog("App Stream URL2: %@", self.StreamURL);

if(self.Appstatus == "true")

{


}

else{

}


}

} else {
let alertView:UIAlertView = UIAlertView()
alertView.title = "Sign in Failed!"
alertView.message = "Connection Failure"
if let error = reponseError {
alertView.message = (error.localizedDescription)
}
alertView.delegate = self
alertView.addButton(withTitle: "OK")
alertView.show()
}

} catch {
let alertView:UIAlertView = UIAlertView()
alertView.title = "Sign Up Failed!"
alertView.message = "Server Error!"
alertView.delegate = self
alertView.addButton(withTitle: "OK")
alertView.show()
}

我得到了正确的响应,但是在尝试从结果中检索数据时这两行出现错误

 self.Appstatus = (jsonData as AnyObject).value("android_app_status") as! NSString


self.StreamURL = (jsonData as AnyObject).value("android_streaming_url") as! NSString

错误是: enter image description here

最佳答案

在 Swift 3 中,大多数 AnyObject 类型已更改为 Any

基本上是在 Swift 中

  • 不要使用 valueForKey 获取字典键的值,使用键订阅。
  • 不要在向下转换类型后向上转换类型(as AnyObject)(适得其反)。
  • 不要使用 Foundation NSString。使用 Swift String

    let jsonData = try JSONSerialization.jsonObject(with: urlData! as Data,  options: .allowFragments) as! [String:Any]
    self.Appstatus = jsonData["android_app_status"] as! String
    self.StreamURL = jsonData["android_streaming_url"] as! String

如果不能保证 key 存在,请使用可选绑定(bind)来避免运行时错误。

最后不要使用已弃用的同步 URL 加载 API。

关于ios - 在 Swift 3 中读取 JSON 文件时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39659768/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com