iOS11のColor Setを使いたいので、UIColorにextensionを追加してみた

Color Setが便利そうなので使おうと思ってソースを修正してから、iOS10では使えないことに気づいたので、UIColorに関数を追加してなんとか動くようにしてみたのでメモ。

xcassetsは下記

![スクリーンショット 2017-08-02 19.29.13.png](https://qiita-image-store.s3.amazonaws.com/0/30834/9c1ef6e0-04e9-33a1-d63b-4d5a9ecf68bf.png)


UIColorに関数を追加（iOS10以下は色を定義）

```swift
extension UIColor {
    ///
    /// UIColor.init(named: String)がiOS11以降からしか使えないのでiOS10用処理
    ///
    static func Init(named: String) -> UIColor {
        if #available(iOS 11.0, *) {
            guard let _0_c: UIColor = UIColor.init(named: named) else {
                return UIColor.clear
            }
            return _0_c
        } else {
            switch named {
            case "Accent":     return #colorLiteral(red: 0.3490196078, green: 0.2431372549, blue: 0.9764705882, alpha: 1)
            case "Base":       return #colorLiteral(red: 0.01176470588, green: 0.662745098, blue: 0.9568627451, alpha: 1)
            case "BaseD1":     return #colorLiteral(red: 0.003921568627, green: 0.3411764706, blue: 0.6078431373, alpha: 1)
            case "BaseD1A080": return #colorLiteral(red: 0.003921568627, green: 0.3411764706, blue: 0.6078431373, alpha: 0.8)
            case "BaseD2":     return #colorLiteral(red: 0.007843137719, green: 0.5333333611, blue: 0.8196078539, alpha: 1)
            case "BaseL1":     return #colorLiteral(red: 0.8823529412, green: 0.9607843137, blue: 0.9960784314, alpha: 1)
            case "BaseL2":     return #colorLiteral(red: 0.5058823529, green: 0.831372549, blue: 0.9803921569, alpha: 1)
            case "Overlay":    return #colorLiteral(red: 0, green: 0, blue: 0, alpha: 0.5)
            case "FontD1":     return #colorLiteral(red: 0.2588235294, green: 0.2588235294, blue: 0.2588235294, alpha: 1)
            case "FontD2":     return #colorLiteral(red: 0.4588235319, green: 0.4588235319, blue: 0.4588235319, alpha: 1)
            case "FontL1":     return #colorLiteral(red: 0.9333333373, green: 0.9333333373, blue: 0.9333333373, alpha: 1)
            case "FontL2":     return #colorLiteral(red: 0.741176486, green: 0.741176486, blue: 0.741176486, alpha: 1)
            default: return UIColor.clear
            }
        }
    }
}
```


使うときは、

Storyboard

![スクリーンショット 2017-08-02 19.22.35.png](https://qiita-image-store.s3.amazonaws.com/0/30834/1d9fbb1d-df7b-2e63-1bfe-b9f4760cf242.png)


コード

```swift
UIColor.Init(named: "FontD1")
```


iOS10をサポート対象外にするときは下記の一括置換とextensionのInit関数を削除

```swift
UIColor.Init(named: 

UIColor.init(named:
```

まだiOS10をサポート対象外にできないので、一旦はこんな感じで実装。
Storyboardで定義できるのは助かる。
xcassetsの色を変えたらStoryboardもコードで記載した部分も変わるのは嬉しい。
※iOS10をサポートしてる場合は、extensionのInitのiOS10の定義の修正も必要ですけど…


## 追記@20170808

ビルドは通るけど、Color Setを指定しているStoryboardではクラッシュを起こすようです。
iOS11になるまで利用しない方がいいかもしれません。。。
m( _ _ )m

利用するなら、この辺りの対応が必要かと。。。
http://blog.kishikawakatsumi.com/entry/2015/08/17/085902

UIColorと同じ感じでUIStoryboardにも処理追加。
無事動作確認完了！

```swift
///
// MARK: ------------------------------ extension UIStoryboard
///
/// extension UIStoryboard
///
extension UIStoryboard {
    ///
    // MARK: ------------------------------ static method
    ///
    /// UIColor.init(named: String)がiOS11以降からしか使えないのでiOS10用処理
    ///
    static func IOS10(name: String, bundle: Bundle?) -> UIStoryboard {
        if #available(iOS 11.0, *) {
            return UIStoryboard(name: name, bundle: bundle)
        } else {
            return UIStoryboard(name: "\(name)iOS10", bundle: bundle)
        }
    }
}
```

呼び出し側

```swift
let sb: UIStoryboard = UIStoryboard.IOS10(name: "StoryboardName", bundle: nil)
```