[iOS] Swiftの変数の型の後ろについている!とか?っていうのは何?

2014/07/8

こんにちは。きんくまです。

この間発表されたSwiftなんですけど、ちょっと触ってみてます。

それで、!とか?の役割がイマイチわかんなかったので、調べてみました。

今回の参考リンクです。

>> [Swift] Optional型についてのまとめ (Quiita)
>> What does an exclamation mark mean in the Swift language? (Stack Overflow)

上のリンクで最初の記事がわかりやすかったので、こちらを使って自分でもコードを書いてみます。
まず前準備で、クラスを作ります。

class Dog
{
    func bark()->String
    {
        return "Wan!"
    }
}

この投稿の続きを読む »

LINEで送る
Pocket

[iOS] StoryboardとUICollectionViewを使う

2014/07/3

こんにちは。きんくまです。

iOSでUIを作るときに、いままでコードで全部書いてきて、いっさいInterfaceBuilderを使っていませんでした。
ただ、もうUIのコードを見るのが大変になってきてしまって、困ったなーという状態です。
なので、ここらでIBをやってみようと思いました。

ちょっと前にこの本を買いました。

中身はUIKitをどうやって扱うかというものです。細かいコンポーネント(UINavigationやUIButton, UISwitch)は特別ページを割いていなくて、StoryboardをInterfaceBuilder使ってやる方法とか、AutoLayout、UIAppearanceなどが載っていました。

あとは、最後の方にUITableViewや、UICollectionView、コンテナビュー関連があります。

で、Sotryboardを使った感想としては、「これは便利だ!」ということでした。(今更、、)

なんていうかコードで全部uI作っていると、常に頭が画面をイメージしながら作らないといけなくてしんどい。その点IBは全てを目で見ながらポチポチクリックしていけばできる。また、AutoLayoutも視覚的に設定できるし、それだと3.5インチ、4インチ対応も割と楽にできる。
あと、イベントも毎回addTargetしなくていいし、楽だなー。と思いました。

GUIはなるべくレイアウトツール使った方がいいですね。

あー、でもhtmlはどうなんだろ?あれは、レイアウト用の仕組みがhtml,cssときちんと分離できているから、いまさらGUIじゃなくてもいいのかな。
GUIで書いている人って、いまどのくらいいるんだろ? 自分の場合は、レイアウトの調整は、Chromeのインスペクタで値を調整して、いい感じの値になったら、コードにコピペっていうふうにしてるんだけど。

この投稿の続きを読む »

LINEで送る
Pocket

[日記] Excelからコピーした文字列の終端でハマる

2014/06/30

こんにちは。きんくまです。

小ネタです。忘れないうちにメモです。

とあるExcelで書かれた仕様書に、「このコードを使って下さいな」という指示がありました。

なので、Excel(mac版です)からコピーして、エディタに貼付けました。
ところが、何故か文字列の連結がうまくいかないのです。

private static const SAMPLE_URL:String = "http://www.example.com/item"; //このURLをコピーした

public function getConfiguredURL():String
{
  return SAMPLE_URL + "?num=5";
}

getConfiguredURL();とやると予定では、以下の文字列にしたかったのですが、

"http://www.example.com/item?num=5"

引数なしになって返ってきます。

"http://www.example.com/item"

いろいろやったあげく、Excelからコピペした最後の部分に終端文字が入っていたことに気がつきました。

終端文字(ヌル文字)っていうのは、C言語の文字列に使う「\0」っていうやつで、文字列はここまでですよっていう印です。
URLエンコードすると、%00です。サーバーのセキュリティにでてくるヌルバイト攻撃に使われるやつです。

なので、さっきのは正確に書くと

private var SAMPLE_URL:String = "http://www.example.com/item\0";

ていう感じに入っていたので、いくら文字列を連携しようとしても、そこで文字列が終わりと見なされてしまい、その次がつながらなかったというわけでした。
なので、いったんコピーした最後の部分を消して、もう一度自分で打ち直したところ、うまくいくようになりました。
ヌル文字を消すときは、一回バックスペースキーをおしてるのに、カーソルが左に動かずそのままでした。ヌル文字消すのはこんな感じなんでしょうかね。

で、FlashBuilderだと見分けがつかなかったのですが、Xcodeにコピーしたところ、

terminate_char

という感じに、?を逆さまにしたやつが見えました。これがヌル文字なんでしょうか、、。
こっちの場合は、消すときにカーソルがちゃんと移動して見えました。

以上メモでしたー。

LINEで送る
Pocket

[日記] リーダブルコードを読んだ

2014/06/28

こんにちは。きんくまです。

「リーダブルコード」を読みました。

どんなことが書いてあるかというと、どうやったら読みやすいコードが書けるか?が書いてあります。

デザインパターンなどは書いてません。
それはコードの構成方法で、読みやすさはもうちょっと手前にあるもの。

例えば、

・変数やメソッドの名前のつけかた
・コメントの書き方
・制御フローの書き方

といったものです。このあたりをどうするかは、意外とあいまいだったりすると思います。(コード規約とはちょっと違う)

それで、デザインパターンやクラス分けの方法よりももっと身近で、毎日何気なく書いていることだけに、ちょっと意識するだけで、あとからじわじわ効いてきそうだなと思いました。

LINEで送る
Pocket

[日記] 「Webを支える技術」を読んだ

2014/06/24

こんにちは。きんくまです。

「Webを支える技術」という本を読みました。

どんな本かというと、

httpとかURIってどんなもの?RESTって何?という本です。
サーバー側の具体的な言語やソフトウェアについては書かれてなくて、仕様上どんな値のやりとりがあるかについて書かれています。

Webページを見るとき、ブラウザからサーバーにリクエストを送ってページが返ってくるってことはわかっていても、具体的にどういうやりとりがあるのか、イマイチよくわかっていませんでした。

そのへんを、リクエスト、レスポンス、ステータスコードなどを用いて説明してくれてたので、わかりやすかったです。

あと、一番知りたかったのが、RESTについてです。
本を買う前に一応ネットで、ざっくり調べて何となくわかったんですが、これについても理解が深まった気がします。

で読み終えて、RESTfulなアプリを作るのにいま知りたいのはこんなところかな。

・PUT, DELETEの実際の実装方法
・mod_rewriteを使ったURIの扱い
・認証をともなう必要がある場合のやりとり

LINEで送る
Pocket

[AS3] FlexUnitのparameterizedで失敗したテストの詳細がうまくTraceできないとき

2014/06/23

こんにちは。きんくまです。

FlexUnitを使ってテストしててうまくいかないことがありましたのでその話です。

Flexunitでテストデータをまとめて用意したいときは、ドキュメントによるとParameterizedの機能を使うといいみたいです。

>> FlexUnit Parameterized Test Styles

結果は正しく出るのだけど、(下の画面。いまはテストが全て成功しているんですが、テストが失敗したときのことです)

flexunit_fig1

失敗したテストの詳細を表示する部分に、何も表示されない現象が起きてしまい、困っていました。

flexunit_fig2

この投稿の続きを読む »

LINEで送る
Pocket

[AS3] AIRでのライフサイクルイベント

2014/06/19

こんにちは。きんくまです。

iOS, Androidでライフサイクルイベント(アプリが立ち上がった、バックグラウンドから立ち上がった)というのがあります。
それがAIRだとどうなるのか調べました。

AIRだとこんな感じにイベントがとれます

NativeApplication.nativeApplication.addEventListener(Event.ACTIVATE, appActivateHandler);
NativeApplication.nativeApplication.addEventListener(Event.DEACTIVATE, appDeactivateHandler);
NativeApplication.nativeApplication.addEventListener(InvokeEvent.INVOKE, appInvokeEventHandler);

ざっくりいうとActivateはバックグラウンドから立ち上がったとき、Deactivateはバックグラウンドに移行するとき、InvokeEventはアプリが立ち上がったときです。

で、調べた結果はこんな感じになりました。

air_lifecycle

同じマスに複数のイベントが書いてある場合は、上から順番に実行されています。

URLスキームで立ち上げるというのは、別アプリからAIRアプリ内に登録したスキームを使って立ち上げたということです。

InvokeEventはReasonというのがあります。どういう理由で立ち上がったかという意味です。
ここでは、StandardとOpenURLの2種類がありました。
OpenURLのときは、argumentsから実行されたのURLを読み取ることができます。

my.app.customurl://path/foo?bar=hoge&fuga=aaa

みたいな形です。

>> 参考 arguments

また、上を見ると分かるのですが、ActivateイベントがiOSだとない場合があったり、InvokeEventとActivateイベントがiOSとAndroidで実行順が入れ替わってたりしました。

起動時になんかやる必要がある場合は、このあたりに気をつければ大丈夫かなと思いました。

LINEで送る
Pocket

ページトップへ戻る