スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【1-6】SwiftによるiOSプログラミング基礎(スタンフォード大学)

はじめに

スタンフォード大学の「Swiftで作るiOS開発入門」の講義がiTunesで配信されていることが話題になりました。
私も観てみたのですが基礎から教えてくれてとてもわかりやすい。
でも動画だとどうしても時間が掛かってしまうのでこのシリーズでは講義のエッセンスをまとめていきます。
https://itunes.apple.com/us/course/developing-ios-8-apps-swift/id961180099

シリーズ全体の目的

アップルの新しいプログラム言語「Swift」でiOSのイケてるアプリを作ること

シリーズ1の目的

「Swift」でCalculator(電卓)をつくる

この記事(シリーズ1-6)の目的

実際にコードを書く


55.jpg
コードを書き始める前にドキュメントの確認方法を確認。オプションキーを押しながらコードにマウスポインターを合わせるとクリックして情報を参照することができる。例えばオプションキーを押しながらUIButtonをクリックしてみる。


56.jpg
すると、UIButtonに関する情報が列挙されたボックスが出てくる。
このボックスの下部にあるReferenceのリンクをクリックするとドキュメントを読むことができる。


57.jpg
ではコードを書いていく。
上図のように、

let digit = sender.

と記入すると次に入力できるものの候補がでてくる。ドットの後に文字をタイプしていくとインクリメンタルに候補が絞られていく。


58.jpg
ここではcurrentTilteを利用したいので、

let digit = sender.currentTitle

とする。
ここでletとは「定数」を表す。コードの上部にあるvarは変数を表していたのに対し、letはこの後変更されない数を明示的に示すことでコードを読みやすくすることができる。他の言語では定数を大文字にする場合があるが、Swiftではその習慣はない。


59.jpg
前のステップで入力したコードがどのような出力を得るのかまずは試してみる。
先ほどのコードの下に

println("digit = \(digit)")

と記入する。
printlnはコンソールに出力するためのグローバル関数で、()内に書かれた文字列を出力する。


60.jpg
実際にシミュレータで実行してみる。
シミュレータ起動後に「5」のボタンを押したのが上図。
コンソール(下部の表示領域)に出力があることがわかる。
ここには

digit = Optional("5")

と表示された
このOptionalというのはなにか?これはSwiftにおいて非常に重要な内容なのでしっかり理解する必要がある。
まず、digitの型を宣言していないことに注目。
Swiftは非常に厳格に型の定義をさせる。それに対してここまでのコードでは

let digit = sender.currentTitle

と宣言するだけでdigitが「何型の定数なのか」ということを明示していない。
しかし、Swiftは型を反映することができる一面もある。
つまり、上記のコードの場合、

let digit

だけでは方の宣言されていない定数ということになるが、

let digit = sender.currentTitle
 
このようにすることにより、digitにsender.currentTitleの型を反映させることができる。


62.jpg
さて、ではこのdigitが何の型になっているのか。
それはオプションキーを押しながらdigitをクリックするとわかる。
するとdigitは「String ?」であると表示される。
この「?」はOptionalを表す。
Optionalは2つの値を持つことができる。
1つ目は「Not Set」(nilと同意)、2つ目は「なにか」。
そしてこの例での「なにか」とは?の横にあるStringの事を示す。
つまり、digitは「文字列」または「nil」を扱うことができる定数であるということになる。


63.jpg
sender.CurrentTitleのCurrentTitleをオプションキーを押しながらクリックしてみると、これもdigitと同じように「String?」であることがわかる。


64.jpg
次に下記のようにcurrentTitleのあとに「!」を挿入する。

let digit = sender.currentTitle!

この感嘆符は「Optionalのアンラップ」を意味する。
こうすることでOptionalはOptionalではなくなるので、currentTitleが「nil」だった場合プログラムはクラッシュしてしまう。


65.jpg
それでは再度シミュレータで実行してみると、今度はコンソールに数字が表示される。


66.jpg
続けてコーディングしていく。

display.text = display.text + digit

と書いてみる。
すると画面の左側に赤い×マークが出てくる。これはこの行にエラーが有ることを示す。
なぜこの行にエラーがあるかというと、右辺のdisplay.textはString型ではなくOptionalだからだ。
そこで下記のようにするとエラーは消える。

display.text = display.text! + digit


67.jpg
再度シミュレータで実行してみると、数字ボタンを押すと0のあとに数字が追加されていくのがわかる。
実際のCalculatorでは先頭に0とは表示されないのでこの部分を修正する。


68.jpg
funcの上に下記のように宣言をする。

var userIsInTheMiddleOfTypingANumber: Bool

これはbool型の変数「userIsInTheMiddleOfTypingANumber」の宣言であるが、これにはエラーが発生する。
Swiftではすべての宣言を初期化しなければいけないというルールがある。
ちなみにuserIsInTheMiddleOfTypingANumberという変数名が長過ぎるように思えるが、Xcodeは一度宣言した変数名を補完してくれるので長くてもわかりやす命名をするのがよい。


69.jpg
そこで下記のようにuserIsInTheMiddleOfTypingANumberを初期化するとエラーが消える。

var userIsInTheMiddleOfTypingANumber: Bool = false


70.jpg
最後に下記のように仕上げる。

if userIsInTheMiddleOfTypingANumbe{
display.text = display.text + digit
} else {
display.text = digit
userIsInTheMiddleOfTypingANumber = true
}

このコードの意味は、
最初の1回だけは「0」を入力された数字に置き換え、その後はその数字の後に数字を追加していく。
ということ。
ここまでできたらシミュレータで実行すると期待した結果を得ることができる。

コメント

コメントの投稿

非公開コメント

PR

PR

プロフィール

何でも書くman

Author:何でも書くman
思ったことや備忘録など、とりあえずなんでも書きます。IT系のことや趣味、生活に関わることなども。

ページの先頭へ戻る
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。