I've just started iOS development and learning Swift. My code below works, but I'm interested to know in ways I can improve it having no experience in iOS Swift prior to this attempt.
import UIKit
class NewsViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
var tableView: UITableView!
var titleItems: NSMutableArray = []
var descritpionItems: NSMutableArray = []
/*
class to get data from API
*/
class RemoteAPI {
// base url
let baseUrl = "http://api.dev/web/"
var newsTitle: NSMutableArray = []
var newsDescription: NSMutableArray = []
func getData(completionHandler: ((NSArray!, NSError!) -> Void)!) -> Void {
// get news feed url
let url = NSURL(string: baseUrl + "news")
// create session
let session = NSURLSession.sharedSession()
// set task
let task = session.dataTaskWithURL(url!, completionHandler: {data, response, error -> Void in
if (error != nil) {
return completionHandler(nil, error)
}
var error: NSError?
// convert data object to json
let json = JSON(data: data)
for var i = 0; i < json.count; ++i {
// get news title from json object
var title = json[i]["title"].string
var blurb = json[i]["description"].string
// add to dictionary
self.newsTitle.addObject(title!)
self.newsDescription.addObject(blurb!)
}
if (error != nil) {
return completionHandler(nil, error)
} else {
return completionHandler([self.newsTitle,self.newsDescription], nil)
}
})
task.resume()
}
}
// get data
var api = RemoteAPI()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
self.view.frame = CGRect(x: 0, y: 50, width: 320, height: 480)
self.tableView = UITableView(frame:self.view!.frame)
self.tableView!.delegate = self
self.tableView!.dataSource = self
self.tableView!.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
self.view?.addSubview(self.tableView)
api.getData({data, error -> Void in
if (data != nil) {
self.titleItems = self.api.newsTitle
self.descritpionItems = self.api.newsDescription
self.tableView!.reloadData()
} else {
println("API failed :-(")
println(error)
}
})
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
return self.titleItems.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
var cell:UITableViewCell=UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "mycell")
if let newsTitle = self.titleItems[indexPath.row] as? NSString {
cell.textLabel?.text = newsTitle
}
if let newsDesc = self.descritpionItems[indexPath.row] as? NSString {
cell.detailTextLabel?.text = newsDesc
}
return cell
}
}