Objective-CにSwiftを組み込むときに必須!Bridging Headerについて
最近は会社でiOSを触っているのですが「いい加減新しいのはSwiftで書きはじめよう」ということで、Swiftをじわりじわり書いています。佐伯です。
やはりSwiftは分かりやすい。というよりとっかかりやすい。
Objective-Cの気持ち悪い[ ]記法よりも、javascriptよりで感覚的にメソッド、プロパティにアクセスできる。セミコロンが要らないのはまだ違和感があるけど
んで、よっしゃ!Swiftでばりばり書くでー!と意気込んでやってみたものの、即大きな壁にぶち当たった。Objective-Cのクラスを使えない。
インポートが必要なわけでもないっぽい。
調べるとどうやらObjective-CのプロジェクトでSwiftを使うにはBridging Header(ブリッジングヘッダー)というファイルを作らないといけないみたい。
なんぞそれ
どのObjective-CクラスをSwiftで利用するかを記載したもの。
一般的には"$(TTARGET_NAME)-Bridging-Header.h"という名前のファイルが使われる。
書き方は他のヘッダーファイルのように"#import"を使い、他のヘッダーファイルで定義されているObjective-Cクラスを取り込むようにする。Objective-CのクラスをSwiftへ橋渡ししてくれるものみたい。
ブリッジングヘッダーの初期設定
・プロジェクトに <# $TARGET_NAME #>-Bridging-Header.h という名前のファイルを追加
・Build Settingから上記ファイルを設定
XcodeのBuild Settingから"Swift Compiler - Code Generation"カテゴリがある。その中に"Objective-C Bridging Header"のところに"$TARGET_NAME"/$(TARGET_NAME)-Bridging-Header.h"のように記載することでブリッジングヘッダーが有効化させる。
例えば、以下のようなヘッダークラスがObjective-Cであったとする。
@interface EZOcject:NSObject
@property(readwrite,strong)NSString *name;
@property(readwrite,strong)NSString *note;
-(id)initWithName:(NSString*)name;
-(id)initWithName:(NSString*)name note:(NSString*)note;
@end
//上記コード:http://program.station.ez-net.jp/special/handbook/swift/class/objc.asp
このようなときにブリッジングヘッダーファイルにEzObject.hをインポートしておけば、このクラスをSwiftで利用することが出来る。
class EzObject:EzObject{
override func textWithString(string:String)->String{
return super.textWithString(string)
}
}
//上記コード:http://program.station.ez-net.jp/special/handbook/swift/class/objc.asp
Kindle Unlimitedが遂に日本上陸!さっそく登録してみた!
ついに....
Amazonが提供するサービス、Kindle Unlimitedが日本に上陸しました。
もともと8月にリリースという情報が回っていたので、昨日一昨日から待ちわびていたのですが、3日の朝、ついにやってきました。待っていたよ...お前を...
Kindle Unlimitedとは
Kindleの電子書籍が月額わずか980円で読み放題、というサブスクリプションモデルのサービスですね。初回30日は無料体験が可能なようです。以下は本サイトから。
うむむ
・幅広いジャンルの本を
・好きな端末で
楽しめる感じですね。僕個人は電子書籍よりも紙派ではあるのですが、 「読み放題」という言葉の強さに惹かれて、今回のリリースを心待ちにしていたのです。定額で〜し放題って、素敵な響きですよね。サブスクリプションモデル、恐るべし。
んで、私自身登録して間もないので詳しいことは書けませんが、さわりの部分をすこし紹介できればな、と思います。
まずはトップ。
当たり前かもしれませんが、Amazonのkindle書籍の階層にありますね。UIも同じです。
ジャンルごとに選ぶことも
以前話題に上がっていた本もちらほらあるみたい
個人的にはインベスターZが有るのが嬉しかったですね。まとめ買いしようか悩んでいたのでw
現時点での感想
うーん。まずまず、という感じですね。
ちょっと期待しすぎていたのかな...。
最初の感想は「お、結構ジャンル幅広いし、数も多そうだ。いいかも!」だったのですが、かゆいところに手がまだ届いていないというのが正直なところです。
技術本に関して言えば、他ジャンルを学びたい時にある程度の知識を抑えるだけの本はあるが、クリティカルな1冊がないんですよね。ダイレクトパブリッシングな本も多いですしね。オライリーなどが読める日はくるのでしょうか。厳しいかな。。
ただ、本の数は圧倒的(和書12万冊以上、洋書120万冊以上!)なので、これで月額980円なら買いかな?と思います。面白そうな本を発掘する楽しみはありますね
いずれにしろkindle端末、欲しいなあ。
phpでよく見かける@とは?
久々すぎて自分のブログが怖い佐伯です。
ときどきphpを開発していて「@hoge = ~ 」のようなものを見かけるのですが、「php @」でGoogle先生に聞いても教えてくれず。。
最近「php アットマーク」で出てくることに気付きました。世知辛いですね。
@とはエラー制御演算子というもののようです。
例えば
$hoge = $_GET["test"];
という変数を宣言していたとして、そこに
$hoge = @$_GET["test"];
とするとエラーがあってもエラーメッセージを表示させないようにできるのだそう。
うーん、ライブラリなんかは余計なエラーを出さないように@が必要なのかもしれませんね。基本的に開発ではエラーは可視化したほうが良いと思うけど...
ということで調べてみるとDB関連の関数で使用することが多いようです。
PHPのMySQL関数はデータベースとの処理でエラーが発生した場合、ブラウザに自動的にエラーメッセージを吐き出すようになっているそう。実際に公開中のサイトにエラーが出るのは好ましくないため、@を使って制御しているみたいですね。
$con = mysql_connect("localhost","mysql","password");
↓
$con = @mysql_connect("localhost","mysql","password");
参考:http://park18.wakwak.com/~little-box/Dreamweaver/sql009.htm
メールアドレスにマッチする正規表現
こんばんは、佐伯です。
今回は地味に使いそうな「正規表現でメールアドレスをマッチさせる」について書きます。
条件
・ユーザ名@ホスト名.ドメイン名の形式
・ユーザ名は英数字(大文字、小文字)または「_-.」
・ホスト名は英数字(大文字、小文字)または「_-.」
・ドメイン名は英数字(大文字、小文字)
対象例
・yamada@gmail.com,
・I_lile_dog-nyan-nyan@saeki.co.jp
・test@test.jp
などなど
さっそく解答です
[¥w¥-¥.]+@[a-zA-Z0-9¥-¥.]+¥.[a-zA-Z]+
一例ですが、こんな感じです。
なんじゃこりゃ、という方の為に以下で切り分けて解説します。
ユーザ名(yamada)
[¥w¥-¥.]+
¥wは英単語を構成する文字、もしくはアンダーバーを指定します。
¥-は「-」を、¥.は「.」を指定しています。
それを[ ]で囲むことで、¥wか¥-か¥.のどれかひとつを指定できます。
最後に+をつけることで上記の「¥wか¥-か¥.のどれかひとつ」を1回以上繰り返している、というわけです。
ホスト名(@gmail)
@[a-zA-Z0-9¥-¥.]+
ユーザ名のように[¥w¥-¥.]+ という書き方でもよいですが、ちょっと変えてみました。
@の後に、
a-z(英小文字)、A-Z(英大文字)、0-9(数字)¥-、¥.のどれかひとつ
を1回以上繰り返しています。
ドメイン名(.com)
¥.[a-zA-Z]+
これも今までと同じです。
¥.(.)の後にa-z(英小文字)、A-Z(英大文字)のどれかひとつ
を1回以上繰り返しています。
同じElementを呼び出し元に合わせて切り替える
佐伯です。久々エントリです。恐縮です。ひい。
CakephpではElementを使ってViewの共通部分をまとめて表示することが出来ますが、
呼び出し元によって微妙に文言を変化させたいこともあるかと思います。
そういった時は引数をElementに渡してあげることで、表示の出し分けが出来ます。
Elementを呼ぶときに一緒に変数を渡します
//Elementを呼び出す
echo $this -> element('user_search' , array('admin_flg' = 0));
Element内では変数の値によってif文で分岐させます。
//Element(user_search)
if ($admin_flg = 0){
//$admin_flg = 0の場合の表示
}else if($admin_flg = 1){
//$admin_flg = 1の場合の処理
}
注意すべきなのは、この方法を使うと、変数を渡さなかった場合にelement内で「変数が未定義だよ!」とnoticeエラーが出るので(動くのですが)設計上よろしくないです。すべてに変数を渡してあげましょう。
【CakePHP】HtmlHelperを使い現在のページのURLを取得する
自分自身のページURLを取得したい場合がある場合、
純粋なPHPで書く場合は$_SERVER['REQUEST_URI']で可能ですが
Cakephpではどうすれば良いのでしょうか
こういった場合に使用するのがヘルパーです
ヘルパーとは
ビュー(見た目の部分)の処理を効率化してくれるモジュール、お助け機能のことです。
HtmlHelper::url()は、因数からURLしてくれるモジュールです。
この第一引数を空にするとデフォルトで今開いているページのURLを返してくれます。
結論から言えばHtmlHelperを使用して
//$this->Html->url(' ',true);
と記入すれば完了です。
第二引数のtrueはどちらでもよくて、つけたらドメイン名もついてくる、つけなかったらドメイン名は省いてくれる、って違いです。
//$this->Html->url(' ',true); だと
http://cav-inet/search/123
//$this->Html->url();だと
cav-inet/search/123
って感じですね。
また、第一引数に配列を入れることで以下のように任意のURLを吐き出すことも可能です。
echo $this->Html->url(array(
"controller" => "foo",
"action" => "bar",
"fuga" => "hoge"
));
時々使うので是非参考に。
悪者が苦しまなきゃ気がすまない
そのバラエティ番組では、ある悪女が紹介されていた。
紹介されていたのは「友達でしょ?」といえば何でも済むと思っている女性である。
その女性をスタジオのあるタレントが「この子は一度地獄を見たほうがいい!社会は上手くいかないことばかりだということを分からせてあげたい!」と激しく中傷した。
僕はその発言がとても不快に感じた。
それと同時にとても興味深かった。
苦しみでしか分かり合えない
苦しむことが共通言語になっていることが世の中には往々にしてあるのではないか。
恐らく先ほどのタレントは今までの道のりでとても苦労をしてきたのであろう。
この人の世界の中では苦しみが今の自分の絶対的要素なのである。
誰かにアドバイスをするとき、人は自分の経験を根拠にアドバイスをする。
「今の自分があるのは過去の苦しみがあったからだ。だからお前も苦しむべきだ。」
その人にとってはこれはアドバイス。救いの手をさしのべているのである。
その人は「苦しんできた経験のある人」としか分かり合えない。
共通言語とはこういう意味である。
世間を賑わすスキャンダルや炎上も、こういった要素が見え隠れしている気がしてならない。度々みられる誹謗や中傷も、本人にとっては「アドバイス」なのかもしれない。
なので、割りと大事かもしれませんよ、スルー力。
なんとなくこういうことを思いました。確かに苦しむこともあるけれど、それは必要不可欠な要素じゃないと思うんですよね。
もっと優しい生活があってもいいじゃない。
前へ進むのに苦しみが絶対に必要な要素ではないです、きっと。
楽しさで分かり合える社会が出来たら素敵ですよね。お花畑バンザイ