Skip to content

Instantly share code, notes, and snippets.

View azamsharp's full-sized avatar

Mohammad Azam azamsharp

View GitHub Profile
func loadArticles(callback :([Article] -> ())) {
URLSession.shared.dataTask(with: url) { data, response, error in
if let data = data {
let json = try! JSONSerialization.jsonObject(with: data, options: [])
let dictionary = json as! JSONDictionary
let articleDictionaries = dictionary["articles"] as! [JSONDictionary]
func loadArticles(callback :([Article] -> ())) {
URLSession.shared.dataTask(with: url) { data, response, error in
if let data = data {
let json = try! JSONSerialization.jsonObject(with: data, options: [])
let dictionary = json as! JSONDictionary
let articleDictionaries = dictionary["articles"] as! [JSONDictionary]
struct ArticleListViewModel {
var title :String? = "Articles"
var articles :[ArticleViewModel] = [ArticleViewModel]()
}
extension ArticleListViewModel {
init(articles :[ArticleViewModel]) {
self.articles = articles
private func loadArticles() {
// this url should be part of the URL builder scheme and not right inside the
// view controller but right now we are focused on MVVM
let url = URL(string: "https://newsapi.org/v1/articles?source=the-next-web&sortBy=latest&apiKey=0cf790498275413a9247f8b94b3843fd")!
// this web service should use generic types. Again this is not part of the implementation
// as we are focusing on MVVM model
Webservice().getArticles(url: url) { articles in
print(articles)
private var viewModel :ArticleListViewModel = ArticleListViewModel() {
didSet {
self.tableView.reloadData()
}
}
struct ArticleListViewModel {
var title :String? = "Articles"
var articles :[ArticleViewModel] = [ArticleViewModel]()
}
extension ArticleListViewModel {
init(articles :[ArticleViewModel]) {
self.articles = articles
struct ArticleViewModel {
var title :String
var description :String
}
extension ArticleViewModel {
init(article :Article) {
self.title = article.title
self.viewModel.title = self.titleTextField.text!
self.viewModel.description = self.descriptionTextField.text!
import Foundation
class Dynamic<T> {
var bind :(T) -> () = { _ in }
var value :T? {
didSet {
bind(value!)
}
class AddArticleViewController : UIViewController {
// For this example assume they are UITextField
@IBOutlet weak var titleTextField :BindingTextField!
@IBOutlet weak var descriptionTextField :BindingTextField!
var viewModel :AddArticleViewModel! {
didSet {
viewModel.title.bind = { [unowned self] in self.titleTextField.text = $0 }