Swift の Optional のメモ
Swift の Optional についてのメモ。 型の後ろにつく「?」や「!」がわからなかったので調べつつ動作確認をしたのでメモ。
[Swift] Optional型についてのまとめ
http://qiita.com/edo_m18/items/ca8c9c21049c280d3328
[Swift] 「!」、「?」マーク(Optional)についてのメモ
http://qiita.com/cotrpepe/items/e30c7442733b93adf46a
のあたりを読みつつ動作確認。以下はその結果。
// var prop: Optinal<String> と同義. optional でラップされる // ? はnilの可能性を含む. var prop: String? // var prop2: ImplicitlyUnwrappedOptional<String> と同義 // ! は ? でラップされた状態をアンラップする var prop2: String! // 確認1: ?, ! を利用した場合の 初期値 nilセット var hoge:String? = nil // OK nil は OK var hoge1:String! = nil // OK これはなぜ?初期値に nil がセットできるのは問題では? //var hoge2:String = nil // NG nil は NG var hoge2:String = "hoge" // OK nil 以外なら OK // 確認2 ?, ! で宣言した変数に対するメソッド実行(と、実行時に ?,! を指定した場合) // ?の場合 // エラー。Optinal<String>の記法の通り wrap されているので、直接 String のメソッドは利用できない。静的解析のタイミングでエラー var value1 = hoge.toInt() // OK。 hogeがnilかチェックをしてくれる。hogeがnilの場合は toInt は実行しないので実行時エラーにはならない。 nil 出ない場合に実行される var value2 = hoge?.toInt() // 実行時エラー。 ! で String としてアンラップしており、コンパイルは通るが、実際には nil なので実行時エラーになる var value3 = hoge!.toInt() // !の場合 // 実行時エラー。 コンパイルは通るが、実際には nil なので実行時エラーになる var value4 = hoge1.toInt() // OK。 hogeがnilかチェックをしてくれる。hogeがnilの場合は toInt は実行しないので実行時エラーにはならない。 nil 出ない場合に実行される var value5 = hoge1?.toInt() // 実行時エラー。 ! で String としてアンラップしており、コンパイルは通るが、実際には nil なので実行時エラーになる var value6 = hoge1!.toInt() // ?も!もなし // OK。 var value7 = hoge2.toInt() // エラー。 hoge1 は optionalType ではないので ? は使えない. 静的解析のタイミングでエラー var value8 = hoge2?.toInt() // エラー。 hoge1 は optionalType ではないので ? は使えない. 静的解析のタイミングでエラー var value9 = hoge2!.toInt()
Swift で UITableView の実装
Swift で UITableVIew を使ってみます。
手順
- StoryBoard で UITableView, UITableVIewCell を配置する。
- ViewControllerでは、UITableViewDataSource, UITableViewDelegateを継承し、初期処理でdeletegate,dataSourceの設定を行う。
※もちろんStoryBoardからの設定でも可 3. 必要なdelegateメソッドを実装する。以下実装例です。
import UIKit class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { @IBOutlet var tableView: UITableView var items:Array<String> = ["one", "two", "three", "four"] override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. self.tableView.delegate = self self.tableView.dataSource = self; } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int { return items.count } func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! { let cell: UITableViewCell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell! cell.accessoryType = UITableViewCellAccessoryType.Checkmark cell.textLabel.text = "\(self.items[indexPath.row])" cell.detailTextLabel.text = "Subtitle index : \(indexPath.row)" return cell } func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) { // 選択するとアラートを表示する let alert = UIAlertView(title: "alertTitle", message: "selected cell index is \(indexPath.row)", delegate: nil, cancelButtonTitle: "OK") alert.show() }
objective-c の頃とほとんど同じ手順で実装できます。
ただ、これだとcellのaccessoryTypeが効かない模様。
何か設定が足りない?betaだから??継続調査。。
色々触ってみたところ、TableViewの幅が画面を超えていただけのようでした。 試しに極端に短くしてシミュレータ上に表示しきれるようにするとちゃんと表示されました。
なお、画面にFitするようにするには、
- StoryBoard上でTableViewを貼り付け元のViewと同サイズにする
- TableVIewを選択し、pin をクリック(右下の |-□-| というやつ)
- Spacing to nearest neighbor で左右を固定
とすればOK。
この辺りは Auto-Layout, Constrains というキーワード辺りの話しになりますがまだまだ勉強が必要そうです。
Markdown記法のおさらい
Marddown記法について
wikipedia その他もろもろにも書かれてますが改めて確認
強調
書き方:
*強調*
結果:
強調
見出し
書き方:
# 見出し1, ## 見出し2, ### 見出し3, #### 見出し4
結果:
見出し1
見出し2
見出し3
見出し4
コード
書き方:
`var hoge = "aa"` または ``` var hoge = "aa" ```
結果
var hoge = "aa"
var hoge = "aa"
※```の場合は言語を指定することで言語に合わせた色にできる 上記にjavascriptを指定すると、
```javascript var hoge = "aa" ```
↓
var hoge = "aa"
となる
リスト
書き方:
* リスト
結果
- リスト
- サブリスト
※半角スペース4つ開けて * を書くと上位のリストのサブリストになる(2つでもOKな場合もある)
※番号付きにしたい場合は * ではなく 1. 2. …をつかう
1. リスト1 2. りすと2 3. りすと3
↓
- リスト1
- りすと2
- りすと3
リンク
書き方:
[リンクのテキスト](リンクのアドレス "リンクのタイトル")
結果:
[Google](http://www.google.com "ツールチップですな") の場合
表
書き方:
|foo|bar|hoge| |-|-|-| |おはようございます|こんにちは|こんばんわ| |1|2|3|
結果:
foo | bar | hoge |
---|---|---|
おはようございます | こんにちは | こんばんわ |
1 | 2 | 3 |
vagrantメモ
基本の基本のお勉強です。
vagrantの使い方
初期化
#vagrant init <box名>
init を実行すると vagrantfile ができる
起動するには
起動
#vagrant up
とすることでVMを起動することができる。 起動したVMに繋ぐには
接続
#vagrant ssh
とするだけでOK。 終了するときは
終了
#vagrant halt
とすればよい。
なお、vagrant のサイトにあるubuntuはGUIがない。 もしもこのboxをGUIで起動したい場合は
sudo apt-get install xfce4 sudo add-apt-repository ppa:gnome3-team/gnome3 sudo apt-get update sudo apt-get install gnome-shell sudo apt-get install ubuntu-desktop sudo apt-get install gdm sudo dpkg-reconfigure gdm
を実行した後に、vagrantfile を修正する。
具体的には以下のコメントアウトを外す。
vb.gui = true
これでvagrant upをすると画面が立ち上がる(ったはず)。 ただし、この手順をした後は、/vagrantフォルダの共有設定が解除される模様。 なので、再度共有設定が必要になる。
ローカルに保存
いろいろメモ(UIView Titleのカスタマイズ、サイズ指定)
本日のいろいろメモ
・UIView のTitleをカスタマイズする方法。
http://www.yoheim.net/blog.php?q=20121203
・Viewを画面いっぱいに配置する
http://d.hatena.ne.jp/mizop/20111205/1323104955
これは、UIWebView を画面いっぱいにして表示する例