2019-01-01から1年間の記事一覧

Counter with useReducer+Flux 的な何か

後で振り返るように。 action&state interface Action<ActionType> { type: ActionType; payload?: any; } enum CounterActionType { Increase, Decrease } interface CounterState { count: number; } type CounterAction = Action<CounterActionType>; function reducer(state: CounterSta</counteractiontype></actiontype>…

Swift URLからパラメーターを取り出す

ディープリンク対応する際にこちらのリポジトリを参考に実装しました。 urlのパラメーター(具体的にはuser?id=0 user/:id的なやつ)はpathParameterとqueryParameterと呼ばれているらしいです。 使用例 URLの文字列をpattern文字列を指定してパースします。 …

ContainerViewController / Custom TabBarControllerを作る

TabBarをカスタマイズしたい 標準のUITabBarControllerだと、痒いところをカスタマイズするのが大変です。 TabBarをUIViewのサブクラスとして自作することで、自由にUIやアニメーションの実装ができるようになると思います。 UITabBarController - UIKit | A…

Swift Logger

Literal Expressionを使って情報を付け足し出力する。 struct Logger { static func debug(_ item: Any, file: String = #file, line: Int = #line, function: String = #function) { #if DEBUG let components = [ "Debug \(Date())", "file: \(file)", "li…

DI Containerをサクッと実装してみる

AngularJSのInjectorのソースを読んでから一回DIライブラリを作って見たくなったので、何も考えずSwiftで実装してみる この方法が良い悪いの話は置いておいて、Angularのようなインターフェースを目指す。 class ApiClient {} class QiitaRepository { let c…

Swift Type Eraser is 何?

ググると出てくるやつ 多分 try! Swift 2016で発表があってそれのまとめ記事がよく出てくる。 protocol Pokemon { associatedtype Element var element: Element { get } } associatedtype を持つProtocolで変数を宣言するとエラーになる。 let pokemon: Pok…

カレンダーを実装してみた

moment.jsに少々手こずったが1日はかからないくらいで実装できた。 iOSだともう少し時間がかかってしまう。 ググった感じ組み方はtableタグにheader2つのやり方と、divで囲んでulで並べる感じのが多かった。 table使ったことなかったのと、多分それで組ん…

ChromeのColorPickerを実装した

TODO: gif, refactor, github // https://gist.github.com/mjackson/5311256 class Picker { constructor() { this.view = { canvas: document.getElementById('canvas'), colorPanel: document.getElementById('colorPanel'), dummyPalette: document.getEl…

RxJSを使ってincremental searchする

<html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>RxJS Demo</title> <style> body { font-family: 'Arial'; background: white; text-align: center;} #container…</meta></meta></meta></head></html>

Swiftでタグを入力するUIを作ったやつ

タグを入力するViewを作った 以前に下のようなタグを入力する画面を作成したのですが、これもアウトプットしないと勿体ない系だと思ったので簡単にまとめます。 類似するUIを持つ具体的なアプリがすぐには思いつかないのですが、日記アプリやメモアプリなど…

SwiftでTooltipを書く

SwiftでTooltipを書いた こうゆうツールチップを書きました。 こんな感じに書けます。 本当はもう少し描画周りのリファクタしたりカスタマズ性を持たせたりしたいが、そもそも自分が使わないのでこの辺でアウトプットします。 private let toolTip = Tooltip…

nodebrewのメモ

brew install nodebrew nodebrew -v churabou@churabou ~> nodebrew install v8.9.4 Fetching: https://nodejs.org/dist/v8.9.4/node-v8.9.4-darwin-x64.tar.gz Warning: Failed to create the file Warning: /Users/churabou/.nodebrew/src/v8.9.4/node-v8.…

簡単なGridLayoutを実装するためのLayoutクラス

はじめに iOS開発をはじめて2年が経ち自分なりにUIKitでいろんなUIを作ってきました。そろそろアウトプットとしてgoogle検索で上位でてくる古い情報を上書きしようとと思っていた矢先、SwiftUIがでてきてしまい一気にモチベーションが下がってしまいました。…

CoreAnimationのサンプル

雑にまとめます。 用語が一部正しくない場合がございます。 Pathに沿ってアニメーション CAKeyframeAnimationにpositionで指定して、pathを指定してあげると パスに沿ってアニメーションします。 let anim = CAKeyframeAnimation(keyPath: "position") anim.…

Xcodeのショートカットを覚える

トラックパッドを封印する際に必要なショートカット。 単語移動 Ctr + n Move Down TD Ctr + p Move Up TD Ctr + b Move Backward TD Ctr + f Move Forward TD Ctr + a Move To Beginning of Paragraph TD Ctr + e Move To End of Paragraph TD b n p f はma…

ReactiveSwift Signal.Observerにbind出来るようになった🎉

SwiftでMVVMのViewModelを作るとき、Viewからの入力に関していえばViewModelでObservableを保持しそれをObserverとして公開するのが一般的だと思います。 final class ViewModel { private let tapLoginSubject = PublishSubject<Void>() var tapLogin: AnyObserver<Void></void></void>…

ReactiveSwiftを触ってみる

textField.rx.text .bind(to: label.rx.text) .disposed(by: bag) textField.rx.text.asDriver() .drive(label.rx.text) .disposed(by: bag) label.reactive.text <~ textField.reactive.continuousTextValues map: do { let (signal, observer) = Signal<String, NoError>.pi</string,>…

RxTestを使ってみる

さっと動かしてみる func test_observer() { // ①TestSchedulerを生成する (仮想時刻を0で初期化) let scheduler = TestScheduler(initialClock: 0) // ②TestObserverを生成する let observer = scheduler.createObserver(Int.self) // ③イベントを流す sche…

関数でも解放されない。

タイトル適当ですが、手元で動かしたものをサクッと出力。 androidのxmlとかvueやanglureのように、swiftでも宣言的にUIを定義してみようと、少しいじってみた。 こんな感じのボタンクラスがあるとして import UIKit final class Button: UIButton { conveni…

Swift structのクロージャーが変数をキャプチャする

初めてクロージャーを見たときこそ関数とどう違うのかわからなかったが、 普段の開発では特に気にせず普通に使っていた。 RxSwiftのObserverクラスを見てみると少し不安になってきた。 struct Observer { var eventHandler: () -> () init(_ eventHandler: @…