iOS11의 ColorSet을 사용하고 싶어서 UIColor에 extension을 추가해 봤습니다.

14229 단어 XcodeSwiftios11
ColorSet이 편리해 보여서 사용하고 싶어서 원본 코드를 수정한 후에 iOS10에서는 사용할 수 없다는 것을 발견하여 UIColor에 함수를 추가하여 이동할 방법을 생각해 적어 두었습니다.
xcassets는 다음과 같습니다.

UIColor에 함수 추가(iOS10 아래 색상 정의)
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

코드
UIColor.Init(named: "FontD1")
iOS10이 지원되지 않을 때 다음 대량 교체와 extension의 Init 함수를 삭제합니다
UIColor.Init(named: 

UIColor.init(named:
아직 iOS10을 지원 대상에서 제외할 수 없기 때문에 잠시 이런 느낌으로 설치합니다.
스토리보드로 정의할 수 있어서 정말 큰 도움이 됐어요.
xcassets의 색깔이 바뀌면 스토리보드와 코드에 기재된 부분도 바뀌어서 기쁩니다.
※ iOS10을 지원하는 경우에도 extension의 Init의 iOS10 정의를 수정해야 합니다...

추기@20170808


구축은 통과했지만 ColorSet을 지정한 Storyboard는 붕괴를 일으킬 것 같습니다.
iOS11 전에는 사용하지 않는 게 좋을 것 같은데...
m( _ _ )m
이용하려면 이 근처의 대응이 필요해요...
http://blog.kishikawakatsumi.com/entry/2015/08/17/085902
UIColor와 같은 느낌으로 UIStoryboard에서도 처리가 추가되었습니다.
안전 동작 확인 완료!
///
// 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)
        }
    }
}
호출자
let sb: UIStoryboard = UIStoryboard.IOS10(name: "StoryboardName", bundle: nil)

좋은 웹페이지 즐겨찾기