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

Swift で循環参照するケース

循環参照という言葉を最近よく耳にしていて、なんとなく相互参照の結果メモリリークしてしまうというのは分かっていたのですが、じゃあどうしたら起きてしまうのかというところがあやふやだったので調べてみました。 循環参照 インスタンスは参照カウンタと…

UIPickerView の使い方

UIPickerView とはこういうやつです。 これを使うための最低限の部分です。 UITableView 等と同様に DataSource と Delegate を設定して、表示する列数、行数、要素を各メソッドで return するといった感じです。 import UIKit class ViewController: UIView…

UIAlertController 使ってみた

UIAlertController を使うことで Alert や Action Sheet を画面に表示することができます。 Alert や Action Sheet とはこういうやつ↓です。 Alert Action Sheet 使う際の流れとしては、以下のような感じです。 Alert も Action Sheet もやることは同じなの…

shibuya.swift #5 で初めての LT をしてきた

LT

shibuya.siwft で生まれて初めての LT をしてきました。 shibuya-swift.connpass.com shibuya.swift にはお手伝いとして何度か参加させてもらっていたのですが、今回は自分が話す側だったのでとても緊張しました。頭が真っ白になることなく無事終わったので…

Swift の Class, Protocol を Objective-C で使う

Objective-C 側で ProjectName-Swift.h を import すれば使えるでしょとか思っていたのですが、すんなり使えなかったので書いておきます。 Class を使う SampleObjcClass.h と SampleObjcClass.m からなる Objective-C のクラス内で、 Swift で書かれた Samp…

iOSDC Japan 2016 に参加してきた!

8/19, 20 にかけて開催された iOSDC Japan 2016 に参加してきました! 記念すべき第一回でした! 次回開催についてですが、 SNS やブログ等で拡散されていけばあるかもということでした。是非来年も開催されてほしいです! iOSDC Japan 2016 の詳細はこちら↓…

constraint を動的に追加 / 削除する

AutoLayout でレイアウトに必要な constraint を追加する場合、 Storyboard 上で指定する方法と、コードで指定する方法があります。 Storyboard では静的な constraint であれば簡単に追加できますが、動的に追加、そして削除したい場合には、コードで指定し…

UITableView のセルの高さを可変にする

高さが可変の UILabel や UIImageView を UITableView のセルに配置したときには、もちろんセルの高さも可変にしたいと思います。 その方法を書きます。 ちなみに UILabel の行数を可変にする方法はこちらのエントリで書きました。 komaji504.hateblo.jp セ…

UILabel の行数を可変にする

Storyboard で UILabel を選択し、 Attributes inspector から Lines を 0 にするだけです。 この値が UILabel の行数で、デフォルトの 1 のままだと 1 行固定となり、 テキストが複数行にわたる場合は、 ... と省略されて表示されるようになります。 今回の…

Objective-C の Category と Swift の Extension

既存のクラスを拡張したいときに、 Objective-C であれば Category 、 Swift であれば Extension により実装していきます。 それぞれの実装方法の例です。 Objective-C NSDate を拡張して sampleMethod というメソッドを実装したい場合、 Objective-C では以…

Swift でページングを実装する

UICollectionView を使って一覧画面を作成していて、画面を一番下までスクロールしたら次ページをロードして表示する、というようにページング処理をさせたいときには、 UICollectionReusableView と UIActivityIndicatorView を使うと良いそうです。 これら…

Alamofire で APIClient を書いてみた

APIClient はどういう設計が良いのかあとずっと悩んでいたのですが、なんとなく形になったような気がしたので書いてみます。 Swift は型安全な言語なのですが、 API から取得される値は様々な型を取り得るので、それを汎用的に扱えるようにするためにはどう…

UICollectionViewCell をタップしたときにセルの色を変える

UICollectionView のセルをタップしたときに何のリアクションもないと寂しいので、セルの色を変える方法を調べました。 UICollectionViewDelegate を継承した Class に以下のメソッドを追加することで、セルをタップしている間は色を変え、離したら元の色に…

MVP と MVVM

MVP と MVVM の違いがよくわからなかったのですが、 調べているうちに違いがなんとなく分かった気がしたので、自分の理解での処理の流れ書いてみます。 MVP 2 種類ある Passive View View で入力がある。 View が入力があったことを知る。 受け取った入力に…

Swift で早期リターン

早期リターンを使うと、コードが読みやすくなります。 例えば、 nil をとりうる値 hoge があって、 nil のときは処理を終了させたいというメソッドの場合、Ruby ではこんな感じになります。 # 早期リターンなし def test if hoge # hoge が nil でないときの…

Rails のルーティング

ルーティングを追加するとき、毎回調べているので少しずつまとめていこうかと思います。 等価な書き方が色々あるので絶対これというわけではありません。 scope URI Pattern にのみ追加されます。 Rails.application.routes.draw do scope :user do resource…

Git で 変更を一時的によける

Git

あるブランチで色々変更をしていて、中途半端だけど、急遽他のブランチで作業をしなければならなくなった時に、 git stash というコマンドが便利です。 変更を加える ➜ sample git:(hoge) touch hoge.txt ➜ sample git:(hoge) ✗ git add . ➜ sample git:(hog…

TableViewController と Storyboard でテーブルをつくる (Swift)

ViewController でテーブルを作成する記事はよく見かけたのですが、 TableViewController を使う方法はあまりなかったのでメモ。 まだまだ学び始めたばかりでよくわかっていないことだらけなので、手順だけ。 ざっくり書くと、 storyboard で TableViewContr…

モデルの属性に自作のバリデーションを追加する

モデルの属性のバリデーションをしたいときに、バリデーションヘルパーの既存バリデーションだけでは足りないことがあると思います。 そのため、Rails ではバリデーションを自作することができます。 その一つの方法としてバリデーションメソッドがあります…

Xcode で info.plist のプロパティを追加する

プロパティの追加方法がわかりづらかったからメモ。 上記の手順をふむとプロパティが追加されるので、以下のようにプロパティ名や型を目的の値に変更して完了です。 ちなみに、、、 ③で一番下のプロパティと書きましたが、どのプロパティでも構いません。 当…

Rails の Time と DateTime

日時を扱うクラスには DateTime と Time の二つがあり、どちらを使えば良いのかを知ることもなく過ごしてきてしまっていたのですが、ざっくりと知ることができたのでメモ。 基本的には Time ( ActiveSupport::TimeWithZone ) を使う Rails 環境においては、…

ローカル環境の Ruboty を slack で動かす

ローカル環境の Ruboty を slack で動かしてみたときのメモです。 Ruboty の使い方は、先日投稿したエントリにざっくり書いてあります。 komaji504.hateblo.jp slack team を用意する 作っていない場合はこちらから。 Slack: Be less busy slack 用アダプタ…

Ruboty を使ってみた

Ruboty 作者の r7kamura さんのエントリを読んで使ってみました。 r7kamura.hatenablog.com 動かしてみる gem install ruboty ruboty --generate cd ruboty bundle install ここまでで Ruboty が動作する状態になります。 bundle exec ruboty を実行すること…

RSpec の expect_any_instance_of でハマった

class Test def say_hoge hoge1 = Hoge.new hoge2 = Hoge.new hoge1.say hoge2.say end end class Hoge def say puts 'hoge' end end こんな感じのクラスがあったとして、 Test#say_hoge で Hoge インスタンスが Hoge#say を1回ずつ実行していることをテスト…

入社してから早くも1年

先日は入社式があり、一緒に働く新しい仲間がたくさん増えました。 ということは、自分が入社してから早くも1年が経ったということです。 この1年は、とてもとてもあっという間でした。が、とても濃い1年でした。 ちょっと振り返る 自分が入社した時はどんな…

curl のオプション小まとめ

Web API の動作検証をするときに curl を使っているのですが、 そのときに使うオプションについて少しだけ書きます。 本当に少しだけです。 認証ユーザの指定 -u user_name:password サーバの認証に使用するユーザ名とパスワードを指定できます。 デフォルト…

Rubyのブロックをメソッド間で受け渡す

ブロックとは ブロックについてはこちらの記事が分かりやすかったです。 qiita.com ブロックを引数にとるメソッドの定義 定義方法は、ブロックを引数にとることを明示する or しないの2通りがあります。 メソッドを呼び出したときの実行結果は同じです。 明…

プルリクのコメントは大事

先日投稿した 大きいプルリクはつらい というエントリで、レビュー側の負担を少なする術を書きましたが、その続編を書きます。これも自戒の意を込めています。 コメントを残す PR を見ればコードの diff が分かるので、どんな変更を加えられたのか、その変更…

大きいプルリクはつらい

チームで開発をする場合、 GitHub 等のサービスを利用してコードを管理することが多いと思います。 既存のコードを変更する際は、GitHub であればプルリクを出して、他の開発者にレビューをしてもらい OK が出ればマージするといったフローが生じます。 レビ…

Factory Girl で関連を定義する

1対1の関連を持つ users テーブルと profiles テーブルがあり、User モデルと Profile モデルがそれぞれ以下のように定義されているとします。 users テーブル field type id int プライマリキー name string email string profiles テーブル field type id …