CSSで記号を実装する
今回は文字の前後に記号を追加したい。 CSSの疑似セレクタ(:before, :after)を使えば要素の前後に値を表示できます。
値を指定するには疑似セレクタのcontentプロパティを使う。 IE7以下は未対応らしいですが、今回は無視しています。
contentプロパティで表示できる項目
- テキスト
- 属性名
- 画像
上記の3つを扱うことができる。 記号を表示するだけであれば、テキストを使う。 その他の使い方に関しては以下の記事がわかりやすい。
テキストの表現方法
機種依存文字はShift_JIS等で文字化けする時があるので、実体参照を使う方が無難 (最近はUTF-8が主流なのであまり気にしなくなってきているらしい)
実体参照について
人にわかりやすい文字で表現されているので使い易いが、 文字実体参照が無い記号も多い(例: ✔) 。この場合はUnicodeの10進数/16進数で表現する数値文字参照を使うしかない。
数値文字参照の調べ方
使いたい記号の数値文字参照を調べるツールも以下の記事に記載されているので、 困ったら見てみると便利だと思います。
サンプルコード
.check-mark:after content: "\002714" color: red
こんな感じで✔を表示することが出来ます。
Objective-CのAppDelegate.mって何をしてるの?
- アプリを作った段階でデフォルトで作られるファイルの一つ。アプリ全体のライフタイムイベントを管理するためのクラス
application: didFinishLaunchingWithOptions
- アプリが初めて起動した時に呼び出される
application:applicationWillResignActive
- アプリが非Activeになる直前に呼び出される
application:applicationDidEnterBackground
- アプリが非Activeになりバックグランド実行になった際に呼び出される
application:applicationWillEnterForeground
- 2回目以降の起動時に呼び出される(Backgroundにアプリがある場合)
application:applicationDidBecomeActive
- アプリがActiveになった際に呼び出される
application:applicationWillTerminate
- システムからのアプリ終了の際に呼び出される
IOSアプリの各状態については以下の記事が詳しい。
Objective-Cの基礎的文法の備忘録
変数
- 変数の型 変数名:
int num = 100; int num; num = 100;
- データの種類
- int: 整数
- float: 小数点つきの数値
- BOOL: YES/NOに使う
- 変数には数値しか入らない
ポインター変数
- ポインター変数とは「メモリ上のオブジェクトを指し示すアドレス」の数値が入っている
- 作る時は「
*
」をつけて作り、使う時は「*
」を外して使う
文字データを扱う
- NSStringを使う
- @“"で囲む
NSString *str = @"Hello World";
NSLogで出力する
- 文字列は
%@
で囲み、数値は%d
で囲む
NSLog(@"%@%d%@", @"残りは", 3, @"回です");
クラス定義
- ヘッダ部と実装部で分ける
/* クラスの宣言部 */ @interface MyClass : NSObject { } - (void)myMethod; @end /* クラスの実装部 */ @implementation MyClass - (void)myMethod { // メソッドの処理を記述 printf("Hello World.\n"); } @end
メソッド定義
-(返す型)メソッド名 { メソッドの中身 }
が基本。「-」はインスタンスメソッド。「+」はクラスメソッド
@implementation MyClass - (void)myMethod { printf("Hello World.\n"); } + (void)myMethod2 { printf("Hello World2.\n"); } @end
メソッド実行
id test = [[MyClass alloc] init]; //インスタンスメソッド実行 [test myMethod]; //クラスメソッド実行 [MyClass myMethod2];
- それぞれ[インスタンス名 メソッド名]、[クラス名 メソッド名]で実行できる
allocとinitとnew
alloc
- インスタンスの生成に必要なメモリ容量を確保する。
init
new
- alloc + init
//以下は同じ意味 id test = [[MyClass alloc] init]; id test = [MyClass new];
id型
- 汎用オブジェクト型
- 最初に型を決めずに変数を用意し、実際に使うタイミングで型を決定する
id test; //型は決まっていない test = [MyClass new]; //この時点でMyClass型になる
ReactNativeのAndroidで画面遷移を実装する
まずAndroidアプリの画面遷移の実装方法を理解してないと実装できないので、確認していく。
Androidアプリでの画面遷移の方法
- 複数のアクティビティを作っておき、インテントという機能を使うと遷移できる
そもそもアクティビティとは?
- ユーザーが実際に目にするアプリケーション画面のこと
- レイアウトが同じ場合はテキストや画像を書き換えて使用することができるが、レイアウトが大きく変わる時は別のアクティビティを用意してあげる必要がある
アクティビティクラス
android/src/main/java/com.xxx/MainActivity
にデフォルトのアクティビティクラスがある- 内容は以下のようになっている
package com.xxx; import com.facebook.react.ReactActivity; public class MainActivity extends ReactActivity { /** * Returns the name of the main component registered from JavaScript. * This is used to schedule rendering of the component. */ @Override protected String getMainComponentName() { return "xxx"; } }
ReactNativeActivityクラスを確認すると、Androidのアクティビティ用のクラスを継承していることがわかる
アクティビティクラスに画面起動や画面をタップした時(onClick)の処理などを書いていく
インテントとは
- 複数のアクティビティを遷移するための機能
- 以下のようにして、画面遷移を行うことができる
public void onClick(View v) { //遷移先のアクティビティへのインテントを作成 Intent intent = new Intent(this, Activity.class); //遷移先の画面を起動 startActivity(intent) }
ReactNativeでJavaで書いたネイティブコードを扱えるようにする
- 単純に画面遷移するだけなら、Linking.openURL(xx)でも良いがAndroidの深い階層の設定画面を開きたい時はネイティブのコードを書くことが必要
- ネイティブのコードをJS側から扱えるようにする仕組みをReactNativeでは用意してくれているのでそれを今回使う
次の記事を参考にした。
通知設定を開きたい時はこんな感じのコードになった。
@ReactMethod public void open(String type_setting) { Intent intent = new Intent(); switch (type_setting) { case "ACTION_APP_NOTIFICATION_SETTINGS": intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS"); //どのアプリの通知設定を開くか判断するのに必要 intent.putExtra("app_package", this.reactContext.getPackageName()); intent.putExtra("app_uid", this.reactContext.getApplicationInfo().uid); break; default: break; } intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); this.reactContext.startActivity(intent); }
moment.jsでタイムゾーンを考慮して特定日の始まりと終わりを取得する
JST(日本標準時)で指定日の始まりの日時文字列(RFC3339形式)を取得
//2017-08-26T00:00:00+9:00 moment.tz('2017-08-26', 'Asia/Tokyo').startOf('day').format();
UTC(協定世界時)に変換すると、2017-08-25T15:00:00+0:00になる
JST(日本標準時)で指定日の終わりの日時文字列(RFC3339形式)を取得
//2017-08-26T23:59:59+9:00 moment.tz('2017-08-26', 'Asia/Tokyo').endOf('day').format();
UTC(協定世界時)に変換すると、2017-08-26T14:59:59+0:00になる
つまった所
Golangで特定ファイルのテストのみ実行する
カレントディレクトリにあるテストを実行
ENV=test go test
パッケージを指定
ENV=test go test パッケージ名
特定テストのみ
ENV=test go test -run TestXXX
特定パッケージの特定テストのみ
ENV=test go test パッケージ名 -run TestXXX