Skip to content

Instantly share code, notes, and snippets.

View yoching's full-sized avatar
👋

Yoshikuni Kato yoching

👋
View GitHub Profile
@yoching
yoching / PairProgrammingIntroduction.md
Last active December 6, 2021 19:26
Pair-Programming Introduction

Pair-Programming Introduction

Yoshikuni Kato


What is Pair-Programming?

  • Two people do programming together
  • Originated from Extreme Programming, which is one origin of Agile method

@yoching
yoching / FunctionalViewStyle2.swift
Last active June 5, 2020 04:28
Functional View Styling using `callAsFunction`
import UIKit
struct Style<View: UIView> {
let apply: (View) -> View
// from swift 5.2
func callAsFunction(_ view: View) -> View {
apply(view)
}
}
import UIKit
import PlaygroundSupport
// 1. define style as function
// 2. make syntax readable
@yoching
yoching / FunctionalViewStyle.swift
Last active April 9, 2023 19:54
Functional view style sample
import UIKit
import PlaygroundSupport
// 1. define style as function
typealias ViewStyle = (UIView) -> UIView
let cornerRadius10: ViewStyle = { view -> UIView in
view.layer.cornerRadius = 10.0
return view
}
@yoching
yoching / setup.md
Last active July 19, 2018 03:46
Mac setup log

Things to install

  • Chrome
  • Xcode
  • SourceTree
  • Atom
  • Iterm2 & Prezi
    • need to configure .zpreztorc to enable git integration
  • BetterTouchTool
  • Deckset
  • Slack
@yoching
yoching / Task.swift
Created April 19, 2018 05:48
Simple Task implementation in swift
typealias Completion<Value, Error: Swift.Error> = (Result<Value, Error>) -> Void
typealias TaskHandler<Value, Error: Swift.Error> = (@escaping Completion<Value, Error>) -> Void
struct Task<Value, Error: Swift.Error> {
private let handler: TaskHandler<Value, Error>
init(_ handler: @escaping TaskHandler<Value, Error>) {
self.handler = handler
}
@yoching
yoching / SingleOrMultiple.swift
Last active April 12, 2018 06:07
Data container which express single or multiple ojects
enum SingleOrMultiple<Value> {
case single(Value)
case multiple([Value])
func map<T>(_ transform: (Value) throws -> T) rethrows -> SingleOrMultiple<T> {
switch self {
case let .single(value): return .single(try transform(value))
case let .multiple(values): return .multiple(try values.map(transform))
}
}
class CustomNavigationController: UINavigationController {
var token: NSKeyValueObservation?
override func viewDidLoad() {
super.viewDidLoad()
token = self.observe(\.viewControllers) { observed, change in
print(observed)
print(change)
}
@yoching
yoching / iOSAppDevelopmentPreparations.md
Last active October 1, 2017 06:22
新規アプリ開発時の決めることリスト

前提

プロジェクトの性質

(規模、期間、運用の有無、注力する点、制約、一般的なプロジェクトとの違いなど)

プロダクトの性質

(使う技術、Framework、対応OS、対応端末など)

開発者のモチベーション

(やりたいこと、最近の流行、前のプロジェクトの反省点など)

@yoching
yoching / StubConfigurator.swift
Created September 19, 2017 03:16
OHHTTPStubs wrapper
public protocol ApiRequestSetting {
static var hostname: String { get }
static var basePath: String { get }
}
final class StubConfigurator {
private let setting: ApiRequestSetting.Type
init(setting: ApiRequestSetting.Type) {