Skip to content

Instantly share code, notes, and snippets.

View tonnylitao's full-sized avatar
🎯
Focusing

Tonny tonnylitao

🎯
Focusing
View GitHub Profile
@tonnylitao
tonnylitao / sync_coredata_from_paging_data.swift
Last active April 14, 2021 12:46
yet another way to sync core data with paging api
import Foundation
import CoreData
struct RemoteUser: Decodable {
var userId: Int
var name: String
}
class User: NSManagedObject {
@NSManaged public var userId: Int
@tonnylitao
tonnylitao / new-mac-setup.sh
Last active February 21, 2021 05:37
a script to setup dev environment after new MacOS installed.
#!/bin/bash
set -e
# before re-install Mac system, keep in mind:
# 1. exporting key and certificate keychain
# 2. iPhone/iPad backup files
# 3. WeChat message backup file
# 4. ~/.ssh
# then change the following git config and run this script
@tonnylitao
tonnylitao / ViewController_update.swift
Last active July 2, 2020 10:10
data flow to view mode with keypath
let mapping = [\User.name: nameField,
\User.email: emailField,
\User.likeKiwi: likeKiwiSwitcher,
\User.travel: travelBtn,
\User.hiking: hikingBtn,
\User.reading: readingBtn]
func update(_ keypath: PartialKeyPath<User>, _ value: Any) {
model[keyPath: keypath] = value
mapping[keypath].value = value
@tonnylitao
tonnylitao / ViewController_Change_VM.swift
Created July 1, 2020 12:59
data flow to view and model
model.name = "Tonny"
nameField.text = "Tonny"
model.email = "test@gmail.com"
emailField.text = "test@gmail.com"
model.likeKiwi = true
likeKiwiSwitcher.isOn = true
model.travel = false
let mapping = [1 : \User.name,
2 : \User.email,
3 : \User.likeKiwi,
4 : \User.travel,
5 : \User.hiking,
6 : \User.reading]
func viewChanged(_ field: Field) {
let path = mapping[sender.tag]
model[keyPath: path] = field.value
@tonnylitao
tonnylitao / ViewController.swift
Last active July 1, 2020 12:39
Listen to event and change model
@IBAction func nameChanged(_ sender: UITextField) {
model.name = sender.text
}
@IBAction func emailChanged(_ sender: UITextField) {
model.email = sender.text
}
@IBAction func switchChanged(_ sender: UISwitch) {
model.likeKiwi = sender.isOn
@tonnylitao
tonnylitao / ViewController.swift
Last active July 1, 2020 12:47
ViewController.swift
@IBOutlet weak var nameField: UITextField!
@IBOutlet weak var emailField: UITextField!
@IBOutlet weak var likeKiwiSwitcher: UISwitch!
@IBOutlet weak var travelBtn: UIButton!
@IBOutlet weak var hikingBtn: UIButton!
@IBOutlet weak var readingBtn: UIButton!
@tonnylitao
tonnylitao / DataBindingEx.swift
Created June 29, 2020 11:50
DataBindingEx.swift
extension DataBinding {
public func update<Value>(_ keyPath: WritableKeyPath<M, Value>, _ value: Value) {
model[keyPath: keyPath] = value
_keyPathViews[keyPath]?.wrappedView?.setValue(value)
}
}
@tonnylitao
tonnylitao / KeypathViewMapping.swift
Created June 29, 2020 11:44
KeypathViewMapping.swift
let mapping = [
\User.name: nameField,
\User.email: gmailField,
\User.address: addressField,
\User.travel: travelBtn,
\User.hiking: hikingBtn,
\User.reading: readingBtn,
]
@tonnylitao
tonnylitao / User.swift
Last active July 1, 2020 12:19
User model
struct User {
var name, email: String?
var likeKiwi = false
var travel = false
var hiking = false
var reading = false
}