2016-11-21 1 views
0

私がストーリーボードにUILabelというインスタンスを持っていて、これを表示コントローラにIBOutletとして接続しているとします。私がこのlabelにいくつかの機能を追加したいのであれば、どうしたらいいですか?私はobj-cについてはサブクラスUILabelを作ることを知っています。しかし、迅速により良いアプローチがあるのだろうかと思います。Swiftのinterfacebuilderから要素にプロトコルを追加する方法はありますか?

この特定のlabelは、私が行うプロトコルに準拠することは可能ですか?

+5

で、あなたはこの 'UILabel'をサブクラス化]または[OK]を、あなたのアプリケーション –

+0

に必要な範囲で拡張機能を作成する必要があるので、私は拡張子が道だと思います。 1つのラベルに対してのみエクステンションを設定できますか? –

答えて

2

あなたは、同じファイル内の唯一のコンポーネントは、新しい機能を使用することができます。この場合UILabel

private extension UILabel {} 

を使用している同じファイルにprivate拡張子を宣言することができます。私は知っている、それは回避策の一種ですが、私は各コ​​ンポーネントごとに1つのファイルを作成する私の場合、それは動作します。

あなたは privateアクセスレベル

EDIT使用することはできませんので、プロトコルコンフォーマンスは、公共なければならないこと

ご注意:あなたが一つのファイルに一つだけUILabelのための特別な設定を必要とするので、この方法ををそれを許可しません。あなたが任意のプロトコルに準拠したい場合は、サブクラス化が唯一の解決策

+0

okビューコントローラ内に複数のラベルを宣言すると、このプライベートな拡張はすべてのラベルに影響します。 –

+1

はその後、サブクラス私を助けてくれてありがとうは大丈夫@KlemenZagar –

+0

、ちょうどあなたの答えの最後にこの説明を入れて、私は「」受け入れられソリューションとしてマーク唯一のソリューションです。 –

0

このラベルのみに機能を追加したいのですが、どうすればいいですか?

あなたは拡張子を使用して、既存のクラスに機能を追加することができます

extension UILabel { 
    func foo() -> String{ 
     // this funtionality is availible on all UILabels now. 
     // You can also call self. Example: 
     return self.text 
    } 
} 

は、詳細な情報hereを検索します。

+0

okですが、画面上のすべてのラベルの一部にしたくない場合はどうしたらいいですか? –

+0

'UILabel'をサブクラス化してカスタムクラスを使用しなければなりません。 – shallowThought

関連する問題