##はじめに
先日、
BASIC から来た手続き型おじさんが、「手続き型」「関数型」「オブジェクト指向」について考える。
というタイトルで投稿しました。
この中で、
swift で iPhone アプリを開発する時は、オブジェクト指向を特に意識しなくても存分にオブジェクト指向の恩恵を受けています。
と述べました。
本稿では私が実際に App Store に公開しているアプリで解説します。
##肝硬変重症度Child分類
これは消化器内科・外科医向けのアプリ*で肝硬変重症度 Child 分類が簡単に算出できます。
2010年に公開して以来、4万人以上の方々にダウンロードして頂きました。
総ビリルビンやアルブミンなどの値を選択すると Child 分類と点数が表示されます。
以下がスクリーンショットとソースコードです。
import UIKit
class ViewController: UIViewController {
@IBOutlet var bilirubin:UISegmentedControl!
@IBOutlet var albumin:UISegmentedControl!
@IBOutlet var pt:UISegmentedControl!
@IBOutlet var fukusui:UISegmentedControl!
@IBOutlet var nosho:UISegmentedControl!
@IBOutlet var childIndex:UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func selectorChanged(){
let b = bilirubin.selectedSegmentIndex + 1
let a = albumin.selectedSegmentIndex + 1
let p = pt.selectedSegmentIndex + 1
let f = fukusui.selectedSegmentIndex + 1
let n = nosho.selectedSegmentIndex + 1
let childPoint = b + a + p + f + n
var childGrade = "A"
switch childPoint {
case 5 ... 6:
childGrade = "A"
case 7 ... 9:
childGrade = "B"
case 10 ... 15:
childGrade = "C"
default:
break
}
childIndex.text = "Child \(childGrade) \(childPoint)点"
}
}
わずか30行足らずのコードです。
bilirubin, albumin, pt, fukusui, nosho などは UISegmentedControl クラスのインスタンスで childIndex は UILabel クラスのインスタンスです。
我々開発者は UISegmentedControl クラスや UILabel クラスの内部ロジックを知らなくても使うことができ(隠蔽)、 UISegmentedControl クラスや UILabel クラスの内部を書き換えることはありません(カプセル化)。
##おわりに
クラス化された UI 部品(オブジェクト)を組み合わせることで、私のようなアマ・プログラマーでも iPhone アプリを作ることができるのはオブジェクト指向の恩恵だと思います。
*医師向けアプリです。
肝硬変重症度Child分類・消化器癌進行度分類