LoginSignup
6
6

More than 5 years have passed since last update.

Swift:メソッド 個人メモ

Last updated at Posted at 2016-06-26

個人メモです。
もし間違いがあれば指摘いただけると助かります。


メソッド

クラスだけでなく構造体や列挙型にもメソッドを持たせることができる

/* 動物 */
enum Pet {
    case Cat, Dog, Bird

    func japaneaseName() -> String {
        switch self {
        case .Cat:
            return "猫"
        case .Dog:
            return "犬"
        case .Bird:
            return "鳥"
        }
    }
}

/* ファミリー */
class Family {
    var familyNumber: Int
    var pet: Pet

    init(familyNumber: Int, pet: Pet) {
        self.familyNumber = familyNumber
        self.pet = pet
    }

    func getAllMember() -> String {
        return "家族が\(familyNumber)人と、ペットに\(pet.japaneaseName())がいます。"
    }
}

// 呼び出し
let family = Family(familyNumber: 4, pet: .Bird)
print(family.getAllMember())

いろんなメソッドの制約

  • メソッドに引数をもつと、第二引数以降は関数と同じようにラベルが必要になる
  • 第一引数には不要だが、つける場合は引数名の前に「#」をつける
  • swift2.xから#は廃止
  • また、swift3.0からは第一引数も第二引数以降と同様にラベルをつけて呼び出すようになる
  • 第二引数以降のラベルも関数と同じように「_」で省略できる

破壊的メソッド

  • 構造体、列挙型のメソッドはプロパティを変更することはできない
  • mutatingをfuncの前につけて宣言することで属性値を変更できる
  • 定数の構造体、列挙型ではmutatingメソッドを呼び出すことはできない
  • クラスの場合は変更可能

型メソッド

  • クラスや構造体のインスタンスではなく型自体に属するメソッド
  • プロパティと同じように構造体と列挙型はstatic
  • 呼び出すときは型.メソッド形式で呼び出す
  • staticメソッドからはstaticプロパティに直接アクセスできる

列挙型

/* 鳴き声 */
enum Animal {
    case Cat, Dog, Mouse
    static func cry(animal: Animal) -> String {
        switch animal {
        case .Cat:
            return "meow"
        case .Dog:
            return "Bow-wow"
        case .Mouse:
            return "squeak"
        }
    }
}

print(Animal.cry(Animal.Dog))

クラス

/* 本クラス */
class Book {
    static var bookName: String = "Swift"
    static func getBookName() -> String {
        return "この本の名前は\(bookName)です"
    }

    var price: Int
    init(price: Int) {
        self.price = price
    }
}

print(Book.getBookName())
6
6
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6