文字っぽいの。

文字を書いています。写真も混ざります。

enumオモシロ記法

Swiftで色やフォントを管理するのにはenumを使うのが大変便利ですよね。次の例は流石に雑ですが、だいたいこんな感じで管理してると思います。

import UIKit

enum Colors {
    case black
    case white

    func color() -> UIColor {
        switch self {
        case black: return UIColor.blackColor()
        case white: return UIColor.whiteColor()
        }
    }
}

Colors.black.color()

これをPlaygroundで実行するとこうなる

f:id:FromAtom:20151216150651p:plain

まぁそりゃそうだって感じなんですが、UIColor.blackColor()と書いている部分を.blackColor()にする事ができます。

import UIKit

enum Colors {
    case black
    case white

    func color() -> UIColor {
        switch self {
        case black: return .blackColor()
        case white: return .whiteColor()
        }
    }
}

Colors.black.color()

で、これを実行すると

f:id:FromAtom:20151216150750p:plain

ちゃんと黒が返ってくる。それじゃあblackColor:というメソッドを生やしたらどうなるんでしょうか?

import UIKit

enum Colors {
    case black
    case white

    func color() -> UIColor {
        switch self {
        case black: return .blackColor()
        case white: return .whiteColor()
        }
    }

    func blackColor() -> UIColor {
        return .redColor()
    }
}

Colors.black.color()

新しくblackColor:を作りました。実行してみると

f:id:FromAtom:20151216150916p:plain

黒が返ってきますね。じゃあこのblackColor:を実行するにはどうすればよいかというと

import UIKit

enum Colors {
    case black
    case white

    func color() -> UIColor {
        switch self {
        case black: return self.blackColor()
        case white: return .whiteColor()
        }
    }

    func blackColor() -> UIColor {
        return .redColor()
    }
}

Colors.black.color()

self.で呼んであげれば良いです。

f:id:FromAtom:20151216151041p:plain

ちゃんと赤が返ってきてますね。

ちなみに

f:id:FromAtom:20151216151159p:plain

enumじゃなくても使えたわ。

追記

return blackColor()でいけました。