読者です 読者をやめる 読者になる 読者になる

iTerm2 v2.9 で、docker tool box が動かない問題の対処法

Docker Toolbox が起動しない

環境

  • Mac OSX El Capitan 10.11.4
  • iTerm2 Build 2.9.20160313

再現手順

  1. Docker Toolbox をダウンロード
  2. 初回起動時に、iTerm2 を選択
  3. docker 系のコマンドを叩くと下記のエラー
  4. Cannot connect to the Docker daemon. Is the docker daemon running on this host?

解決法

source /Applications/Docker/Docker\ Quickstart\ Terminal.app/Contents/Resources/Scripts/start.sh

github.com

Swift で NSObject を継承したクラスに Hashable プロトコルを適応したい

Objective-C のライブラリを Bridging Header を使って、swift から使っている時の話です。

状況

  • NSObject を継承したクラスを継承している
  • そのクラスに Hashable プロトコルを適応しようとする
    • 僕の場合は、Google Map SDK の GMSMarker を継承した Marker オブジェクトを作っていた

エラー

Redundant conformance of 'Marker' to protocol 'Hashable'

このエラーは、すでに使用しているプロトコルを、再度継承しようとした時に起こります。 つまり、GMSMarker はすでに Equatable か、Hashable を継承している、ということになる

ただし、Swift のコードを見る限り、継承はしていない。

原因

NSObject が、Hashable の機能を最初から持っている

解決策

Objective-C の実装を使用する

class Marker: GMSMarker {
    // MARK: Hashable objective-c implementation
    override var hashValue: Int {
        get {
               return userData.hashValue
        }
    }
    override func isEqual(object: AnyObject?) -> Bool {
        guard let marker: Marker = object as? Marker else { return false }
        return userData == marker.userData
    }
}

userDatahashValue を計算していることに深い意味はありません、適当に重複しなさそうな計算式を当ててください。

UIButton の imageView と titleLabel を縦に並べる

こういうボタンを作りたいことがあった。 f:id:ryufloat:20160306113028p:plain

@IBDesignable と @IBInspectable を使って、 xib に反映できる形での実装。 それぞれの中心で alignment を取るようになってる

gist.github.com

参考

stackoverflow.com

要点で学ぶ、デザインの法則150

デザイン
要点で学ぶ、デザインの法則150 -Design Rule Index
William Lidwell Kritina Holden Jill Butler
ビー・エヌ・エヌ新社 (2015-10-16)
売り上げランキング: 35,795

読んだ。

チュートリルとかではなく、図鑑のようなイメージ。

見開き左側に解説、右側に写真や絵を使った使った具体例が載ってる。

すぐに使えるようになるテクニックもあれば、そうでないのも多々載っているので、一度流し読みして、頭の片隅においたあとに、なんとなく思い出してもう一度読む感じで使うといいかもしれない。

swift の enum で、DB に保存されている status 的なものを処理したい

swift

MySQL のカラムの一つに status 的なカラムがあることがある(ある理由は問わないで欲しい)。

この status に「入るはずがない値」を、swiftenum でどうハンドリングするとわかりやすいか…

下記のような enum を用意し、

enum ArticleStatus: Int {
    case Draft = 0 // 下書き
    case Application = 1 // 申請中
    case Examination = 2 // 審査中
    case Public = 3 // 公開中
    case Unknown // 不明
}
article.status = ArticleStatus(rawValue: status) ?? ArticleStatus.Unknown

とかやるとすっきり書けそう