Swift化開発合宿 in 熱海♨️

先日、会社のモバイルエンジニア5名でSwift化開発合宿に行ってきました! 普段はなかなか Swift 化を進めることができないので、こういった機会を設けてガガガっと進めてしまおうということから、今回の合宿が決まりました。 この開発合宿記録を書いていき…

iOSアプリ開発で実機のログに filter をかける

アプリ起動中のログであれば Xcode のコンソールから確認できますが、 アプリを起動したり終了させたときのログを確認したい場合には、Xcode のコンソールでは確認できないので実機のログを確認する必要があるかと思います。 このとき Xcode のツールバーの …

try! Swift 記録 2日目

try! Swift に参加してきました! www.tryswift.co ので、メモっていたことを書きます。 本当に雑なので、間違っているかもしれません。 2日目の分です。 1日目の分はこちら。 テスト可能なコードを書くということの2つの側面 なぜテスト バグを防げる テ…

try! Swift 記録 1日目

try! Swift に参加してきました! www.tryswift.co ので、メモっていたことを書きます。 本当に雑なので、間違っているかもしれません。 1日目の分です。2日目の分はこちら。 Swift開発者が知りたかったけど聞きにくい機械学習のすべて 機械学習ではデータ…

instantiateInitialViewController() が nil になる

同じことで何度もはまっている気がするのでメモ。 SampleViewController の Storyboard と Class を追加して、Storyboard から以下のようにインスタンスを作ろうとすると、nil になってしまう。 let storyboard = UIStoryboard(name: "SampleViewController"…

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年でした。 ちょっと振り返る 自分が入社した時はどんな…