Skip to content

Swift_class

aoyagih edited this page Sep 7, 2020 · 1 revision

クラス

iOSのプログラムはクラスという単位で実装されています。

用語の説明

  • クラス
    • ボタンやテキストフィールドの振る舞いを定めた設計書
  • インスタンス
    • 「実体」「事例」という意味
    • プログラムでオブジェクトを実際に使う時に生み出されるものである。
    • 設計図からオブジェクトを作ることをインスタンス化と呼ぶ。
  • プロパティ
    • クラスが持つデータ
  • メソッド
    • クラスが持つ、何らかの処理を行うための関数

クラスのインスタンス化

var インスタンス名 = クラス名()

import UIKit
var radio = UISwitch()    //radioという名前を持ったUISwitchが1つインスタンス化された(プログラム上で使えるようになった)

クラスがあれば、何個もインスタンスを作ることができます。

var radio2 = UISwitch()
var radio3 = UISwitch()
var radio4 = UISwitch()
var radio5 = UISwitch()
//UISwitchが合計5個作られた。

UISwitchのクラスは、UIKitというライブラリの中に入っていて、importすることで使うことができます。
UISwitchのクラスの中身は、Web上で見ることができます。このようにドキュメントと言います。
UISwitch | Apple Developer Documentation
https://developer.apple.com/documentation/uikit/uiswitch
英語で書かれていますが、よく見ると変数や関数のようなものがいろいろ書かれていると思います。 これらがプロパティやメソッドであり、UISwitchの状態を変えるために必要なものです。

プロパティの設定

プロパティの値を変更するには、以下のようなコードを書きます。
インスタンス名.プロパティ名 = 値

UISwitchのドキュメントを見ると、プロパティの中にBool型の「isOn」があると思います。
「isOn」は、"A Boolean value that determines the off/on state of the switch."と説明されています。
どうやら、isOnのtrue/falseを切り替えることで、スイッチのオンオフを切り替えることができるようです。

radio.isOn = true       //radioのスイッチがオンになった
radio.isOn = false      //radioのスイッチがオフになった

メソッドによるプロパティの設定

次に、メソッドを用いてプロパティの値を変更してみましょう。
そのためには、以下のようにコードを書きます。
インスタンス名.メソッド名(設定値)

今回は、setOnメソッドを用いて、スイッチをオンにします。
ドキュメントを見ると、setOnメソッドは"Set the state of the switch to On or Off, optionally animating the transition."と書かれています。
第1引数のBool値でオンオフを切り替えることができ、第2引数のanimatedという名前のBool値で切り替え時にアニメーションをつけることができるようです。

radio.setOn(true, animated: true)      //アニメーション付きでスイッチをオンにする

独自クラスの作り方

UISwitchのようなiOSでよく使う部品は、Appleがあらかじめ用意してくれておりimportして使うことができます。
しかし、「ライブラリには無い違う形のSwitchを作りたい」とか「新しい部品を作りたい」となった場合は、自分でクラスを作ることもできます。
以下では、自分で独自のクラスを作る方法を学んでいきます。
例として、犬のクラスを作ってみましょう。
犬クラスはプロパティとして「名前」、「犬種」、「誕生日」の3つを、メソッドとして「吠える」を持つとします。
クラスは、class クラス名{}で定義します。

//犬クラス
class Dog{
    //プロパティ
    var name = ""
    var type = ""
    var birthday = ""
    
    //メソッド
    func bark() {
        print("わんわん")
    }
}

var myDog = Dog()     //DogクラスのmyDogインスタンスを作成
myDog.name = "キング"
myDog.type = "ゴールデンレトリバー"
myDog.birthday = "2010/12/31"
myDog.bark()          //わんわん

継承

//犬クラスを継承した盲導犬クラス
class GuideDog: Dog {
    //メソッドのオーバーライド
    override func bark() {
        super.bark()    //継承元のメソッド(わんわん)
        print("きゃんきゃん")
    }
}

var guideDog = GuideDog()
guideDog.bark()        //わんわん、きゃんきゃん

Clone this wiki locally