Swift 使用Alamofire时出错
我现在正在使用Alamofire和SwiftyJSON。我遵循这个教程 我的代码:Swift 使用Alamofire时出错,swift,alamofire,swifty-json,Swift,Alamofire,Swifty Json,我现在正在使用Alamofire和SwiftyJSON。我遵循这个教程 我的代码: import UIKit import Alamofire import SwiftyJSON class ViewController: UIViewController, UITableViewDataSource { @IBOutlet var tblJSON: UITableView! var arrRes = [[String:AnyObject]]() override
import UIKit
import Alamofire
import SwiftyJSON
class ViewController: UIViewController, UITableViewDataSource {
@IBOutlet var tblJSON: UITableView!
var arrRes = [[String:AnyObject]]()
override func viewDidLoad() {
super.viewDidLoad()
tblJSON.dataSource = self
// Alamofire.request(.GET, "http://api.androidhive.info/contacts/").response { (request, response, data, error) -> Void in
// print(response)
// let outputString = NSString(data: data!, encoding: NSUTF8StringEncoding)
// print(outputString)
// }
Alamofire.request(.GET, "http://api.androidhive.info/contacts/").responseJSON { (responseData) -> Void in
let swiftyJsonVar = JSON(responseData.result.value!)
if let resData = swiftyJsonVar["contacts"].arrayObject {
self.arrRes = resData as! [[String:AnyObject]]
}
if self.arrRes.count > 0 {
self.tblJSON.reloadData()
}
}
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return arrRes.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tblJSON.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as UITableViewCell
var dict = arrRes[indexPath.row]
cell.textLabel?.text = dict["name"] as? String
cell.detailTextLabel?.text = dict["email"] as? String
return cell
}
}
但它在这条线上坠毁了:
let swiftyJsonVar = JSON(responseData.result.value!)
我的Pod文件:
# Uncomment this line to define a global platform for your project
platform :ios, '8.0'
# Uncomment this line if you're using Swift
use_frameworks!
target 'UsingAlamofireAndSwiftyJSON' do
pod 'Alamofire', '~> 3.2.1'
pod 'SwiftyJSON', :git => 'https://github.com/SwiftyJSON/SwiftyJSON.git'
end
我使用Xcode 7.2和Swift 2.1。感谢您的帮助。Alamofire和SwiftyJSON非常了解这一点,为了避免强制展开可选的响应处理程序,您可以将响应处理程序更改为JSON响应处理程序,如下所示:
Alamofire.request(.GET, "http://api.androidhive.info/contacts/").responseJSON { response in
switch(response.result) {
case .Success(let value):
let json = JSON(value)
case .Failure(let error):
print(error.description)
}
}
使用上面的代码,您不需要展开可选的,不建议使用@Eric在评论中所说的强制展开
我希望这对您有所帮助。使用
responseData.result.value强制展开Alamofire的可选结果代码>您告诉编译器:“如果没有值,请崩溃我的应用程序。”您的应用程序完全按照命令执行…/解决方法是阅读感谢你的建议。