Personal Factory

Personal Factory

iOSエンジニアの技術ブログ

イベントレポート

【参加レポート】bitFlyer Drink Meetup! #7

9/9 bitFlyer社のドリンクミートアップ イベントが開催されました。 そこに参加したのでレポートします。 http://bitflyer.connpass.com/event/38089/ -------------------------------------------------------------------------------- bitFlyerとは? 仮想通貨ビットコイン取引総合プラットフォーム「bitFlyer」の運営と、ブロックチェーン関連の研究開発を行う、Fintechベンチャーの会社です。 2016年4月に30億の資金調達を行い、国内の月間の売買取扱高は1000億円を超えている、日本で今一番勢いのあるFintechベンチャーの一つです。 TechCrunchに記事が載ってました。 bitFlyerがシリーズCで約30億円を調達、資本金で世界2位のビットコイン取引所に [http://jp.techcrunch.com/2016/04/26/bitflyer_raises_3billion_yen/] ---------------
4 min read
Swift

[Swift]クロージャーの使い方

Swiftの文法で特に分かりづらいものの1つクロージャーの使い方を見ていきます。 環境 今回の記事は以下の環境で実行することを想定している記事です。 * Swift2.2 * Xcode7.3.1 -------------------------------------------------------------------------------- クロージャー クロージャーは自分を囲むスコープにある変数を参照する関数のことをいいます。(変数をキャプチャするといいます。) Swiftは第一級関数をもつ言語で、関数そのものを型に指定できたり、関数をインスタンス化できます。 関数をインスタンス化したら、それはクロージャーになると考えて大丈夫です。 関数に名前がない無名関数としても定義することができます。 【なぜクロージャ(Closure)と言うのか?】 http://qiita.com/mochizukikotaro/items/7403835a0dbb00ea71ae 各言語、クロージャーの概念はなかなかとっつきにくいものがあります。上記のqiitaの記事は言語
7 min read
iOS

[Xcode]PlaygroundのコメントでMarkdownで書こう!

Swiftを手軽に実行できる環境を提供するPlaygroundですが、コメントをMarkdownでかけることはご存知でしたか? 今回の記事ではPlaygroundでMarkdownを書く方法をご紹介しようと思います。 -------------------------------------------------------------------------------- 環境 * Swift2.2 * Xcode7.3.1 -------------------------------------------------------------------------------- Markdownを書く方法 PlaygroundのコメントでMarkdownを使うには、専用のコメントを書きます。 複数行では**/*: 〜 */を、1つの行では//:**を前につけます。 そしてXcodeのメニューからEditor > Show Raw Markupを選択します。 するとコメントがMarkdownで表示されます。 ---------------
2 min read
iOSカンファレンス! iOSDCに参加したよ!
iOS

iOSカンファレンス! iOSDCに参加したよ!

2016年8月20日、iOSカンファレンスのiOSDC (iOS Developers Conference Japan)が開催されました。 https://iosdc.jp/2016/ とても熱気あふれるカンファレンスでした。 参加してよかった! 登壇内容もどれも実践的で、それぞれの登壇者の経験をもとに語られて、参考になるものばかりでした。 この熱気が冷めないうちに、iOSDCの登壇内容を記事にしたいと思います。 私が参加した登壇を書いていきたいと思います。 -------------------------------------------------------------------------------- 海外のiOSカンファレンスに登壇する - 完全版 by shu223 shu223 [https://twitter.com/shu223]さんのiOSカンファレンスの登壇に挑戦した内容です。 > 堤さんの発表始まった!#iosdc [https://twitter.com/hashtag/iosdc?src=hash] — SatoTakeshi_カエ
7 min read
Swift

第2回RxSwift勉強会 @ Sansan参加レポート

2016年8月19日、第2回RxSwift勉強会 @ Sansanに参加してきました。 そのレポートをします。 -------------------------------------------------------------------------------- @kazu0620 [https://twitter.com/kazu0620?lang=ja]さんの発表。 資料もすぐに上がっていた。 https://speakerdeck.com/kazu0620/rxexamplekaraxue-bu-rxswift 勉強になった点を網羅していきます。 bindToについて ストリームの要素が流れてくるのを購読して、その要素を対象に紐付ける。Nextイベントのみに反応して、ErrorイベントとCompletedイベントでは反応しないものだそうです。 Observableを他のObservableと紐付けるものだと理解していたのですが、Subscribeを簡単にするものという認識がなかったので、理解が深まりました。 ShareReplayとHot変換 Obse
2 min read
Tokyo Server-Side Swift Meetup #3に参加してきました
Swift

Tokyo Server-Side Swift Meetup #3に参加してきました

昨日は株式会社Oneteamさんで行われたTokyo Server-Side Swift Meetup #3 [http://tokyo-ss-swift.connpass.com/event/30823/]に参加してきました。 登壇者は白ヤギコーポレーションのYusuke Itoさん、SwiftのServerSideフレームワーク「Slimane [https://github.com/noppoMan/Slimane]」を作っているnoppomanさん、主催されている会社Oneteamの Atsushi Nagaseさんが登壇しました。 値付きenumをhackする https://github.com/novi/tsssm-enum まずはYusuke Itoさんが発表しました。 Swiftの値付きenumで状態によって様々なデータをいれる方法を見ていきました。 Playgroundを配布してその場で試せるようになってました。こういうやり方いいですね。 ----------------------------------------------------------
1 min read
Swift

RxSwiftを使ったデリゲート実装方法

RxSwiftを勉強中です。 概念から、実際の実装まで、まだまだわからないことだらけです。 わかったことから少しづつ記事にしようと思います。 間違いがありましたら、ツッコミお願いしますm(_ _)m 今回はRxSwiftでViewをタップしたらViewControllerでイベントを検知する方法を見ていきたいと思います。 UIViewの実装 //SampleView.swift class SampleView: UIView { //weak var delegate: SumpleViewDelegate? // ここでは`PublishSubject`を使ってイベントを送信する let rx_message = PublishSubject<String>() private func didSelect() { rx_message.on(.Next("message")) } override func awakeFromNib() { self.userInte
1 min read
Swift

Swiftのジェネリクスの使い方

ジェネリクス 型をパラメーターとして扱う方法。型を抽象化できて便利なコードを書けるようになる。 Swiftの標準ライブラリーの多くがジェネリクスを使っている。 この記事ではジェネリクスを使っていないコードとジェネリクスを使ったコードを比較して、ジェネリクスの有効性から使い方までみていきます。 -------------------------------------------------------------------------------- ジェネリクスを使わないイケてないコード Int型の引数2つを入れ替える関数を作ってみます。 func swapTwoInts(inout a: Int, inout _ b: Int) { let temporaryA = a a = b b = temporaryA } このswapTwoInts(_:_)関数を実行してみます。 var someInt = 3 var anotherInt = 107 swapTwoInts(&someInt, &anotherInt) print("someI
6 min read
Swift

[Swift]バックグラウンドでも処理を続ける方法

アプリの処理をバックグラウンドにいっても続ける必要があったので、メモをします。 実行環境 * OS X El Capitan‎ * Xcode 7.3 * Swift 2.2 * iPhone 6Plus (iOS9.2) UIBackgroundTaskIdentifierの登録 通常、NSTimerなどの継続して動く処理でもアプリバックグラウンドに移動した瞬間に処理が止まってしまいます。 しかし、UIApplicationの- beginBackgroundTaskWithName:expirationHandler:か- beginBackgroundTaskWithExpirationHandler:を実行するとバックグラウンド状態でも処理を継続することができます。 iOS4から実装されたマルチタスキングの機能なのだそうです。 ViewControllerに一秒ごとに現在時刻をプリントする処理を書いてみます。 import UIKit class ViewController: UIViewController { var timer = NSTi
1 min read
Swift

Swiftの添字付けの使い方

Swiftの添字付けの使い方をみてみます。 添字付けとは? クラス、構造体、列挙型で定義可能な、リスト、コレクション、シークエンスのアクセスを便利にしてくれるショートカットです。 プロパティのアクセスを便利にできます。 もっと簡単にいうと配列の要素をアクセスするときの[]のこと let tmpArray = [1, 2, 3] print(tmpArray[0]) -------------------------------------------------------------------------------- 添字付けの文法 添字付けは以下のように書きます。 subscript(引数) -> 戻り値の型{ get{ 添字で指定したプロパティを返す文 } set (引数) { プロパティの値を更新する文 } } set節の引数はなくてもよいです。その場合はnewValueという引数が使える。 get節は必須でset節は省略可能。set節省略で読み取り専用の添字を作れる。 添字を使ってみる プロパティの数値桁
3 min read
Swift

Swiftビギナーズ ハンズオンセミナーの運営サポート記録

3/5と3/6、茅場町のコワーキングCo-edo [https://www.coworking.tokyo.jp/] でSwiftのハンズオンセミナーがありました。 そこでのイベントの活動記録を残しておこうと思います。 Swiftビギナーズ ハンズオンセミナー 第1回(全4回) [https://swift-beginners.doorkeeper.jp/events/39019] Swiftビギナーズ ハンズオンセミナー 第2回(全4回) [https://swift-beginners.doorkeeper.jp/events/39249] 内容は、ハンズオン形式で、その場で講師がプログラムを書いていって、各行の説明をしつつ、アプリを作るというものです。 第一回目は、アプリ作りの概要とXcodeのインストール、ボタンを押したら数字がカウントアップするアプリを作りました。 第二回目は、SNSへ投稿するアプリと、ボタンを押したら音がなるアプリを作りました。 私は運営サポートメンバーとして、参加しました。 まだプログラムが不慣れな参加者へ、講義についていっているか、
2 min read
Swift

詳解Swift改訂版読書勉強会 #4 活動記録

本日も2/28、渋谷のコワーキングスペース、beezで 詳解Swift改訂版読書勉強会 #4というイベントをやりました。 イベントURL:http://connpass.com/event/27434/ このイベントは、毎週日曜日の午前中に詳解 Swift 改訂版を一章ずつ読み合わせていくイベントです。 今からSwiftを覚えたい!って言う人にはぴったりのイベントです。 今週の発表は@ToraDadyさん。 私は、運営スタッフとして参加しました! -------------------------------------------------------------------------------- 今日の内容 今日は詳解Swift改訂版の第四章、オプショナルを解説しました。 項目だけ抜粋します。 * オプショナル型とnil * オプショナル型の存在意義 * オプショナル型の値を開示する * 条件判定とオプショナル型 * if-let文 * オプショナル束縛と条件式 * gurd文 * nil合体演算子 * オプショナル型と関数 * 失敗のあ
2 min read
Swift

Swiftの構造体の使い方

Swift2の構造体の文法をまとめました。 Swiftのクラスと構造体は機能的にとても似ています。 定数、変数、関数を同じ文法で作れます。 > 他の言語(Objective-C、C++など)ではクラスはオブジェクトとして知られている。 Swiftではクラスと構造体がより機能的に近しいので、「インスタンス」の用語を使ったほうが良い クラスと構造体ができること クラスと構造体がどちらもできるがいくつかあります。 * プロパティを宣言 * メソッドを宣言 * 添字(サブスクリプト)を宣言 * 初期化 * 拡張 * プロトコルの適用 Objective-Cだとメソッドの宣言などはできなかったですが、Swiftはかなり柔軟に構造体を使えるようになっています。 クラスのみができること 逆に、クラスだけができることは以下です。 * 継承ができる * 型の変換(キャスト)ができる * デイニシャライザができる * 参照カウントでメモリを管理 ARCはクラスのみにある機能みたいですね。 あとでも出てきますが、構造体は値渡しで代入時に構造体インスタンスのコピーが渡され
3 min read
Swift

中身のあるコンテンツの部品

UIButtonやUILabelなど、テキストなどで中身のあるコンテンツはサイズがすでに決まっている部品があります。 この部品のサイズに関する制約は、プログラマーが自分で設定しなくてもすでに設定されています。 これを**Intrinsic Content Size(以下組み込みコンテンツサイズ)**といいます。 -------------------------------------------------------------------------------- 組み込みサイズのありなしでの制約設定 UIViewには、組み込みサイズがありません。 一方でUILabelには組み込みサイズがあります。テキストのサイズがそのままUILabelの幅と高さのサイズになります。 それが制約設定でどのように変わるかを見てみましょう。 UIViewをレイアウト まずUIViewを画面の右下に設定するレイアウトを考えてみます。 Storyboardを開いて、ViewControllerの右下にViewを置きます。 Trailingの制約とBottomの制約を追加してみます。
2 min read
Swift

VFLを使ってみよう

前回(AutoLayoutをコードから使おう) [https://blog.personal-factory.com/2016/01/11/make-auto-layout-via-code/] でAuto Layoutをコードから使ってみました。 実は、Auto Layoutをコードで使う方法は前回のNSLayoutConstraintクラスの +constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant: メソッドを使う方法以外にももう一つ方法があります。 それが**「Visual Format Language (視覚的形式言語)」**を使った書き方です。 (以下VFLと略して話を続けます) まず、VFLのメリット、デメリットと基本の文法を説明したあとに、前回と同じレイアウトをVFLで作って見ようと思います。 -------------------------------------------------------------------------------- メリット
5 min read
Swift

Auto Layoutをコードから使おう

Auto LayoutによるビューのレイアウトはStorybordのGUIで設定できますが、もちろんコードからもAuto Layoutは設定できます。 コードでAuto Layoutができるようになれば、コンテンツをサーバーから取得して動的にレイアウトができるようになり、アプリ制作の幅がさらに広がります。 ただStoryboardでGUIからレイアウトするのとは異なり、コード特有の設定がいくつかありますので1つずつ見ていきましょう。 コードでAuto Layout コードでAuto Layoutを設定する流れは以下です 1. ビューを生成する * translatesAutoresizingMaskIntoConstraintsをオフにする * ビューを他のビューに配置 * ビューの制約を設定する 今回作るレイアウト 今回作るレイアウトは、以下のように赤いビューと黄色いビューを水平に並べるものを作りたいと思います。 設定しようとしている制約もここでまとめておきます。 赤のビュー * 上部と親ビューの上部の距離が88 * 左側と親ビューの左側の距離が10
5 min read
Swift

[Swift]クロージャーについてまとめてみたよ

追記 構成を直して書き直しました。 こちら [https://blog.personal-factory.com/2016/08/25/how-to-closure-in-swift/]からご覧になれます。 -------------------------------------------------------------------------------- Objective-CからSwiftに乗り換え中ですが、つまづく文法がいろいろあります。 その中の一つがクロージャー。 今回はクロージャーについてまとめてみました。 そもそもクロージャーって? wikiの説明を見てみます。 > クロージャ(クロージャー、英語: closure)、関数閉包はプログラミング言語における関数オブジェクトの一種。いくつかの言語ではラムダ式や無名関数で実現している。引数以外の変数を実行時の環境ではなく、 自身が定義された環境(静的スコープ)において解決することを特徴とする。 wiki-クロージャ [https://ja.wikipedia.org/wiki/%E3%82%AF%E3%8
5 min read
iOS

Auto Layoutを使ってみよう

前回の記事 [https://blog.personal-factory.com/2015/12/30/before-start-autolayout/]でAuto Layoutがどんな機能なのかを説明しました。 今回は実際にAuto Layoutを使ってみたいと思います。 サンプルとしてViewを中央配置するレイアウトを作ってみたいと思います。 レイアウトをするときは、前回言ったとおり 今レイアウトしている要素のX軸、Y軸、幅(Width)、高さ(Height)が決まっているか? を考えながらレイアウトしましょう。 上手くいくと思います。 Auto Layoutの制約の追加する方法は大きく分けて2つあります。 「Align」「Pin」の2つです。 Alignは2つ以上のビューを整列させる時に使います。 Pinは隣り合ったビューの距離、ビューの大きさなどを数値で固定させたい時に使います。 > **note:**Xcodeではのキャンバスと、実際のレイアウトは異なるということは頭に入れておいてもいいかもしれません。 ストーリーボードのViewControllerはデフォルト
3 min read
Xcode7.2でPlaygroundが使えない問題を解決する
iOS

Xcode7.2でPlaygroundが使えない問題を解決する

ちょっとしたswiftコードを試したい時に使えるPlayground、それがXcode7.2だとエラーがでて使えなくなっていました。 今回はそのエラーを解消していきたいと思います。 実行環境 * Xcode7.2 * OSX Yosemite バージョン10.10.5 Playground execution terminated のエラーで実行できない 新規Playgroundを作成して実行したところ、Playground execution terminated because the process stopped unexpectedly. というエラーがでて、実行できませんでした。 エラーを日本語訳しても > 思いかけずプロセスが停止したんで、Playgroundの実行は停止しちゃったよ となんの手がかりがつかめない。。 解決方法 stackoverflowで同様の問題が質問されていました。 http://stackoverflow.com/questions/25996714/playground-execution-terminated-becau
1 min read
iOS

Tips:画面サイズ80%の大きさで画像を置く

Auto Layoutを使って画面サイズより80%の大きさで画像を置くやり方を見ていきたいと思います。 スプラッシュ画面などで、アプリアイコンを表示するときに使えるTipsだと思います。 今回の作るレイアウト 今回作るレイアウトを一度まとめます。 * Image Viewを親ビューに対して垂直方向、水平方向ともに中心に置く * X座標とY座標が決まります。 * Image Viewの幅を親ビューの幅の80%の大きさにする * 幅(Width)が決まります。 * Image Viewのアスペクト比を幅高さ1:1にする * 高さ(Height)が決まります。 つくってみよう! ではさっそく作ってみましょう。 新しくプロジェクトを作成して、Main.storyboardを開きます。 Object LibraryからImage Viewを選んでView Controllerに置きます。 Image Viewを親ビューに対して垂直方向、水平方向ともに中心に置く 置いたImage Viewを選択して、Ctrl + ドラッグをしながら上に移動させて、親ビューと接続します。
3 min read
Auto Layout

レイアウトの救世主Stack Viewを使ってみよう

Auto Layoutには実は重大な欠点がありました。 それは、、 レイアウトの修正が大変 ということです。 レイアウトする要素が増えれば振れるに従って隣のビューとの関係も複雑になってしまいます。 例えば、画面上にボタンを縦に3つ並べるレイアウトを考えてみましょう。 ボタンをそれぞれ同じ大きさに縦に3つ並べるレイアウトを作ってみます。 このとき3つのボタンと親ビューとの関係性はざっと数えた分でも10個できてしまいます。 設定によってはそれ以上になることも考えられるでしょう。 ここで、ボタンを4つに増やしたいと思ったらどうでしょう? 少なくとも垂直方向の関係性は見直す必要があるでしょう。 ボタンが3つから4つになったとこで、親ビューとボタン同士の隙間の幅が変わることになるからです。 これはもう一大事です。 制約を1つずつ見なおしてボタンを増やすか、いっそのこと全ての制約を一度全部解除して、もう一度設定し直すかをしなければいけません。 実際私はこのような場合は制約を全部解除して、全ての制約を設定しなおしていました。 この方が、制約を修正するよりもかえって早いことが
4 min read
iOS

Auto Layoutを始める前に

数年前、iPhone4sが全盛期のころまでは、iOSアプリの開発者は各端末のレイアウトを考える必要はありませんでした。 初代iPhoneからiPhone4sまでは画面サイズは一緒だったからです。 その頃に端末サイズのレイアウトで苦労していたのはAndroidアプリのエンジニアでした。(今もそうですが。。) 各メーカーごとに端末のサイズが異なり、それに合わせてアプリをデザインしなければなりませんでした。 しかし、2010年にiOSで動くタブレット、iPadが発売され、2012年にiPhone5が発売され、iOSエンジニアも各端末ごとのレイアウトをそれぞれで設定しなければいけなくなりました。 以下は、2015年12月現在で発売されているiOS端末の画面サイズの一覧です。 ピクセル解像度は物理的なピクセルを計ったもので、ポイント解像度はプログラムからアクセスする座標系で計った解像度です。 各端末ごとに、異なっていることが一目瞭然です。 異なる画面サイズでも、うまい具合に画面レイアウトができるようにする機能がAuto Layoutです。 iOSエンジニアにとっては避けては通れない重
2 min read
[Swift]作業効率10倍アップ?フォーム作成ライブラリー「Eureka」チュートリアル
Swift

[Swift]作業効率10倍アップ?フォーム作成ライブラリー「Eureka」チュートリアル

UITableViewはアプリを作る上で一番基本になるViewですね。 アプリの設定画面、フォームなどでよく使います。 しかし、作るとなったらいろいろめんどくさいのも事実です。 デリゲートを作って、カスタムセル作って、データソースを管理したり。。。 そんな、UITableViewの面倒なものを一掃する便利なライブラリーがあります。 Eureka [https://github.com/xmartlabs/Eureka]です。 これを使えば、作業効率10倍アップは間違いない、あっと言う間にUITableviewを使った画面が作れちゃいます。 ただ、DSL(ドメイン固有言語)でセルを定義していくので、始めのうちは戸惑うかもしれません。 今回はEurekaライブラリーの使い方をご紹介します。 Eurekaとは? Eurekaはウルグアイのアプリデザイン会社XMARTLABS [http://xmartlabs.com/]が開発をしているオープンソースです。 Swift2で作製されているフォーム作製ライブラリーです。 もともとObjective-C製のXLForm [http
5 min read
Swift

UITableviewに文字列センターのフッターを作る

UITableviewに文字列センターのフッターを作るTipsです。 アプリを作っていく中で、UITableViewの一番最後のセルにセンタリングで、アプリ情報を表示しようと思いました。 UITableViewのデータを管理するプロトコルUITableViewDataSource には` * tableView:titleForFooterInSection:というメソッドがあって、文字列を指定するとフッターに文字を表示してくれます。 始めはこのメソッドで事足りるかなと思ったのですが、なんと- tableView:titleForFooterInSection:`文字のセンタリングはしてくれないんですね。 必ず左詰めになってしまいます。 でもセンター、中央揃えでテキストを表示したいときもあります。 そのやり方を見ていきましょう! 目次 * 実行環境 * UITableviewを作る * - tableView:titleForFooterInSection:を使ってみる * - tableView:viewForFooterInSection:を使
3 min read
Swift

オープンソースになったSwiftをまとめてみた

2015年12月3日、ついにSwiftがオープンソースになったことが発表されました。 8月のWWDCで一番話題になったSwiftのオープンソース化。 (観客の熱気がすごかった!) プラットフォーム * Apple Platforms * 必須環境 OS X 10.11 (El Capitan) Xcode 7.2 (including prerelease versions) * デプロイ可能環境 OS X 10.9.0 or later iOS 7.0 or later watchOS 2.0 or later tvOS 9.0 or later * Linux * 必須環境、デプロイ可能環境 Ubuntu 14.04 or
1 min read