Skip to content

Instantly share code, notes, and snippets.

View azamsharp's full-sized avatar

Mohammad Azam azamsharp

View GitHub Profile
import Foundation
import UIKit
class BindingTextField : UITextField {
var textChanged :(String) -> () = { _ in }
func bind(callback :@escaping (String) -> ()) {
self.textChanged = callback
@IBOutlet weak var titleTextField :BindingTextField! {
didSet {
titleTextField.bind { self.viewModel.title.value = $0 }
}
}
@IBOutlet weak var descriptionTextField :BindingTextField! {
didSet {
descriptionTextField.bind { self.viewModel.description.value = $0 }
}
}
struct ChangePasswordViewModel {
var newPassword = Dynamic<String>("")
var confirmPassword = Dynamic<String>("")
}
class ChangePasswordTableViewController : UITableViewController {
private var viewModel :ChangePasswordViewModel = ChangePasswordViewModel()
@IBOutlet weak var newPasswordTextField :BindingTextField! {
didSet {
self.newPasswordTextField.bind { self.viewModel.newPassword.value = $0 }
}
}
@IBOutlet weak var confirmPasswordTextField :BindingTextField! {
@IBAction func save() {
var errors = [String]()
if (viewModel.newPassword.value?.count)! < 8 {
errors.append("Password should be at least 8 characters long")
}
if viewModel.newPassword.value != viewModel.confirmPassword.value {
errors.append("Password is not matching")
}
struct BrokenRule {
var propertyName :String
var message :String
}
protocol ViewModel {
var brokenRules :[BrokenRule] { get set}
var isValid :Bool { mutating get }
struct ChangePasswordViewModel : ViewModel {
var brokenRules: [BrokenRule] = [BrokenRule]()
var newPassword = Dynamic<String>("")
var confirmPassword = Dynamic<String>("")
var isValid :Bool {
mutating get {
self.brokenRules = [BrokenRule]()
@IBAction func save() {
if self.viewModel.isValid {
// update the password
print("update the user's password")
} else {
// show errors
print(self.viewModel.brokenRules)
}
struct ChangePasswordViewModel : ViewModel {
@Required(message: "New Password is required", minLength:8)
var newPassword = Dynamic<String>("")
@Required(message: "Confirm Password is required", minLength: 8)
var confirmPassword = Dynamic<String>("")
class ArticleListViewModel {
private(set) var webservice :Webservice!
var title :String? = "Articles"
var articles :[ArticleViewModel] = [ArticleViewModel]()
init(articles :[ArticleViewModel]) {
self.articles = articles
}