物理の研究の備忘録

高エネルギー物理学とかいうマニアックな研究分野の博士課程にいるわたしの備忘録。主にPCの設定とかプログラミングとか雑多な感じで

物理屋さんのiPhoneアプリ開発日記1~X codeを使ってみる~

はじめに

 

クソゲーを作りたい。

 

 

これは俺の長年の悲願である。

もともと単純作業だったりすごくくだらないクソゲーが好きなので自分でもiPhoneアプリを作ってみたいと思い、Swiftの勉強を始めることにした。

もはやブログのタイトルとまったく関係なくなってきているが気にしない。

 

前回の記事

c++使いのSwift備忘録 - 物理の研究の備忘録

Swiftの超基本的な文法について学んだので、今回はX codeを使ってiPhoneアプリを

作るのに必要なiOS独自のクラスに触れてみたいと思う。

実際の開発に比べるとまだまだ初歩の初歩という感じだが、物理の研究の合間にiPhoneアプリの

開発の勉強をするのはとても楽しいし、いい息抜きになるのでよしとする。

 

準備

 

MacX codeを起動してCreate a new Xcode projectをクリックする。

f:id:hakase73:20180419052356p:plain

今回はiPhoneで動くiOSアプリを作るのが目的なので、iOSにチェックを入れて、Single View Appを選んでNextをクリック。

f:id:hakase73:20180419052544p:plain

プロジェクト情報を入力していく。正直なんでもいいのだけど、Project name

MyAppとかにしてそれ以外を自分の名前とかにした。下の3つのチェックは外しておく。デバイスiPhoneにして、言語はもちろんSwiftにする。(Objective-Cも選べる)

f:id:hakase73:20180419052731p:plain

 

保存場所はどこでもいいけど、とりあえずデスクトップにしておく。

作業画面になった。左側にAppDelegate.swiftとかViewController.swiftとかMain.storyboardとかいろいろ出てくるが、とりあえずMain.storyboardをクリックするとiPhoneの画面っぽい枠がでてくる。なんかそれっぽいぞ!

このストーリーボードってとこで、画面のどこに何を配置してどんな動きをして...みたいなのを作ってくっぽい。

右下のところがらいろいろ部品が選べるので、とりあえずLabelってやつを選んでストーリーボードにぴーっとドラッグしてみる。画面にLabelが貼り付けられた。

↓こんなん。

f:id:hakase73:20180419053820p:plain

 

 右上にある丸が二つ重なってるみたいなやる(Assistant Editor)をクリックすると、に画面編成になって右側にViewController.swiftがでてくる。このViewController.swiftってとこに書いてあるプログラミングが、画面に何をどう表示するかをコントロールしてるっぽい。貼り付けたラベルをコントロールするために、Ctrlを押しながらラベルをドラッグしてViewController.swiftのclass ViewController: ...とか書いてあるとこの下にドラッグする。名前は適当にlabelとかにする。すると@IBOutlet weak var weak label: UILabel!という1行が加わった。

f:id:hakase73:20180419054611p:plain

 これでlabelというクラス変数(インスタンス)を通してストーリーボード上のラベルを制御できるようになった。

 

ラベルの文字を変える。

label.text = "わーい"

の行をviewDiaLoal()関数の中に加える。

その状態で左上の再生ボタン的な奴をクリックする。

シミュレーションの画面に「わーい」と出てくればおっけー。

class ViewControllerってなんや

そもそもここに書かれているプログラミングはなんなのか。

クラスについて知っている前提で話をする。(クラスについては別記事にするかも)

class ViewController: UIViewController{

}

と書いてあるのは、これはViewControllerというクラスについての説明で、UIVewControllerというクラスを継承しているということだ。

このクラスにはVewDidLoad()という関数とdidReceiveMemoryWarning()という二つの関数(メソッド)を持っている。didReceiveMemoryWarning()というのはメモリがやばくなった時に読み込まれるメソッドなので今は気にしない。VewDidLoad()は画面(ビュー)の準備ができたときに読み込まれるメソットで、とりあえずここに変更したいことを加えれば良いことになる。overrideと書いてあるのは継承元のクラスであるUIViewControllerに同じ名前のメソッドがあるけどこっち優先的に読み込んでね!という意味である。ただ、実際にはUIViewControllerクラス内のVewDidLoad()を先に読んで欲しいので、最初にsuper.VewDidLoad()と書いてある。こう書くことで、先に継承元のUIViewControllerのメソッドを読んで、それから変更部分を加えたViewController()クラスのメソッドを読んでくれるということだ。

 

@IBOutletってなんや

次にドラッグした時にできた@IBOutlet weak var weak label: UILabel!について。

@IBOutletっていうのはストーリーボード上からラベルの情報に参照するのに必要らしいけど、うまく説明できないし正確に理解できているかもわからないので今はなんとなくで理解しておく。

var a:Int = 0

とか打つとInt型の変数aが定義されるのと同じように、UILabel型のインスタンスlabelが定義されて、このlabelというインスタンスを通してラベルの情報にアクセスできる。

なのでlabel.text="..."と書くことで、ラベルのテキスト情報にアクセスしてラベルの文字を変更することができる。UILabel!の"!"は非オプショナル型といってnil(つまりデータのない空の状態)を入れちゃいけません、という意味。逆に"?"をつけるとオプショナル型となりnilを入れることが可能となる。weakと書いてあるのはクラスの参照とかメモリがどう解放されるかとかそのへんに関わってくるっぽいけど、とりあえずは気にしない。

 

正直細かいプログラムの定義は使いながらなんとなくニュアンス掴んでいく部分もあると思うし、現時点ではこれくらいの理解でいいかな。

まだラベルの文章変えただけだし、次はもう少しアプリっぽい何かに挑戦したい。

 

おわり。