列挙型を定数として使用するためのちょっとしたトリック

WBOY
リリース: 2016-06-20 12:39:21
オリジナル
1316 人が閲覧しました

Swift.GG の記事を翻訳していたとき、記事内のリンクをたどり、さらに 2 つの記事を勉強しました。今では、非常に多くの記事を翻訳した経験があり、比較的要約することもできました。理論の完全なセットについては、将来的に時間を見つけて具体的に説明します。

この記事は非常に簡単なので、一文ずつ翻訳するつもりはありません。

ご存知のとおり、Swift の列挙型は OC よりもはるかに強力です。今日は列挙型を定数として使用するためのちょっとしたテクニックを紹介します。

画像アセットに列挙型を追加します

以前は、UIImage(名前: "FooBar") を使用して画像を作成していました。一連の "foobar"、"FooBar" を覚えておく必要があります。 "、"foo_bar"、"foo-bar" 画像名は、自動補完がないのでスペルを間違えないように注意してください。

もちろん、スペルミスを避けるために定数 let FooBarImageName = "FooBar" を定義することもできますが、グローバル定数を定義するのはクールではなく、すべてをグローバル スコープの静的構造内に整理することさえあまりエレガントではありません。

Swift の enum を使用してそれを解決する方法を見てみましょう (enum は プリミティブ型文字列 を取ることができます)

enum ImageAsset : String {    GreenApple = "green-apple"  Banana = "banana"  Pear = "pear"  Strawberry = "1-strawberry"  Strawberries = "strawberry-basket"}
ログイン後にコピー

コンストラクターを追加します

画像が必要な場合は、計算された属性を追加します

extension ImageAsset {    var image : UIImage {    return UIImage(named: self.rawValue)!  }}
ログイン後にコピー

次に、ImageAsset.GreenApple.image を呼び出して UIImage を取得します。これはスペルミスがなく、自動補完を提供します。

画像を作成しているので、UIImage も変換してコンストラクターを追加しましょう

extension UIImage {    convenience init(asset: ImageAsset) {    self.init(named: asset.rawValue)!  }}
ログイン後にコピー

これで、UIImage(asset: .GreenApple) を通じて画像を取得できるようになります

列挙型を追加しますUIColors の

UIColors の本質は、実際には RGBA 16 進数 (ffcc00ff) を表すことができるため、色を表すために UInt32 列挙型を使用します。

extension UIColor {    enum ColorName : UInt32 {    case Translucent = 0xffffffcc    case ArticleBody = 0x339666ff    case Cyan = 0xff66ccff    case ArticleTitle = 0x33fe66ff  }}
ログイン後にコピー

これで、UIColor インスタンスを構築できます。上記の列挙を使用して、初期化を追加し、ポイント操作を実行します。

extension UIColor {    convenience init(named name: ColorName) {    let rgbaValue = name.rawValue    let red   = CGFloat((rgbaValue >> 24) & 0xff) / 255.0    let green = CGFloat((rgbaValue >> 16) & 0xff) / 255.0    let blue  = CGFloat((rgbaValue >>  8) & 0xff) / 255.0    let alpha = CGFloat((rgbaValue      ) & 0xff) / 255.0    self.init(red: red, green: green, blue: blue, alpha: alpha)  }}UIColor(named: .ArticleBody)  
ログイン後にコピー

どこでも enum 定数を使用します

フォローしてください enum 大法を唱えるのは良いことです!

Localizable.strings

列挙型を作成し、String 拡張子にコンビニエンス init を追加します。その後、NSLocalizedString("Greetings" の代わりに String(key: .Greetings) を使用できます。コメント: " ")。

UIStoryboard

グローバル定数 (storyboardID/識別子) の使用を避けるために、変換後の呼び出しで、UIStoryboard インスタンスと UIViewController を作成する必要がある場合があります。

let wizzardVC = UIStoryboard.Wizzard.initialViewController()  let msgCompVC = UIStoryboard.Message.Composer.viewController()  let tutorialVC = UIStoryboard.Tutorial.viewController(.QuickStart)  
ログイン後にコピー

上記の呼び出しは、Wizzard、Message、Tutorial がそれぞれ列挙型に対応していることに注目してください。複数の列挙型を UIStoryboard に追加し、それぞれにケース エントリを割り当てることができます。

概要

作者は最終的に、この列挙型を自動的に生成するライブラリ「SwiftGen」を作成しました。これをプロジェクトにインポートするだけです。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート