Swift,Objective-Cプログラミング ~ iOS ~

Objective-C,Swift,Apple Watchなどのプログラミング

【iOS Swift入門 #252】IBInspectableでenumの定義を使いたい


はじめに

XCode6.xから使えるようになったIBInspetableを使うと、
作成したサブクラスのプロパティの値をStoryboard(XIB)で設定できるようになるので便利です。

設定できるプロパティのデータ型は決まっていて、下記の通り。

  • Bool
  • Int
  • CGFloat
  • Double
  • String
  • CGPoint
  • CGSize
  • CGRect
  • UIColor
  • UIImage

残念なのが、enum列挙型がないことである。
でもなんとかしてenum列挙型を使いたいときはこうしている、というのを書く。
他にもっといいやり方があれば教えてもらいたい。

試すこと

例えば、
予め定義したスタイルから選択し、ViewControllerの表示を変更したい
をやりたいとする。

やること

  • ViewStyleというenum列挙型でNormalSpecialExtremelySpecialの3つのケースが定義
  • ViewControllerでviewStyleプロパティを保持
  • ViewController表示時にviewStyleプロパティからスタイルに合わせた表示情報を取得する

実装

まずはIBInspectableでStoryboardから設定しない例

IBInspectableでStoryboardから設定しない例

import UIKit

enum ViewStyle{
    case Normal
    case Special
    case ExtremelySpecial

    var backgroundColor: UIColor{
        switch self{
        case .Normal: return UIColor.redColor()
        case .Special: return UIColor.blueColor()
        case .ExtremelySpecial: return UIColor.yellowColor()
        }
    }
}

class ViewController: UIViewController {
    var viewStyle: ViewStyle = .Normal

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        view.backgroundColor = viewStyle.backgroundColor
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

実行

実行すると下記画像のようになる。 初期表示時にviewStyleプロパティを見て、 Normalの場合の背景色である赤を設定している。

f:id:fjswkun:20150905163124p:plain

ViewControllerのスタイルをNormal以外にしたいときには ViewController初期化時にviewStyleプロパティの値を変更しなければいけない。 静的な表示についてはStoryboardでやるようにしたい場合、少しいやですね。

IBInspectableでenumを使う場合には?

IBInspectableでenumを使う例

viewStyleOptionというInt型のプロパティを用意し、 これを変えるとviewStyleプロパティが変わるようにするのだ。

import UIKit

enum ViewStyle{
    case Normal
    case Special
    case ExtremelySpecial

    var backgroundColor: UIColor{
        switch self{
        case .Normal: return UIColor.redColor()
        case .Special: return UIColor.blueColor()
        case .ExtremelySpecial: return UIColor.yellowColor()
        }
    }
}

class ViewController: UIViewController {
    private var viewStyle = ViewStyle.Normal  // ↓のviewStyleOptionで設定するのでprivateに変更
    @IBInspectable var viewStyleOption: Int = 0{  // viewStyle設定用のプロパティ。Storyboardやxibで設定できる
        didSet{
            switch viewStyleOption{
            case 0: viewStyle = .Normal
            case 1: viewStyle = .Special
            case 2: viewStyle = .ExtremelySpecial
            default: assertionFailure("Not Exists")
            }
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        view.backgroundColor = viewStyle.backgroundColor
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}



結果

Storyboard画面を表示するとviewStyleOptionの入力欄が追加されている。 f:id:fjswkun:20150905163714p:plain

試しに「2」のExtremelySpecialを入力する。 実行すると背景色が黄色になるはずだ。

f:id:fjswkun:20150905163825p:plain

おわりに

他にもっといいやり方があれば教えてもらいたい。
Storyboardのいろいろな使い方はこの本で紹介されているようだ。

UIKit徹底解説 iOSユーザーインターフェイスの開発

UIKit徹底解説 iOSユーザーインターフェイスの開発



参考情報

  1. iOSアプリ開発未経験の人向け
  2. iOSアプリ開発をはじめたとき最初に買った書籍 【アプリ作成未経験の人向け】 Storyboardを使って画面を作成していく。 手順にしたがって操作していくと、ボタンの作成やWebViewの作成などができる。 アプリって、こんな感じで作るんだというのを体験できる。
    Swiftではじめる iPhoneアプリ開発の教科書 【iOS 8&Xcode 6対応】

    Swiftではじめる iPhoneアプリ開発の教科書 【iOS 8&Xcode 6対応】


・わかりやすくていい、と聞いた本 立ち読みした感じだと【アプリ作成未経験の人向け】

絶対に挫折しない iPhoneアプリ開発「超」入門【Swift & iOS8.1以降 完全対応】

絶対に挫折しない iPhoneアプリ開発「超」入門【Swift & iOS8.1以降 完全対応】


②を終えたくらいの知識の方向け ・アプリ開発独学中に2冊めに購入した書籍 プログラミング知識はなくても、若干理解するのに時間がかかる程度で、 読み進められるわかりやすさがある。

iPhoneアプリ開発塾

iPhoneアプリ開発塾


③中級者、上級者向け

詳解 Swift

詳解 Swift