2016-12-23 13 views
0

私はSwiftには新しく、多分それは愚かな質問ですが、私はそれに答えを見つけることができません。UITextField拡張で新しいフィールドを作成する方法は?

私は拡張子を作成しました:プロパティが設定されている場合、アプリケーションのクラッシュを

extension UITextField { 

    var placeholderLabel: UILabel { 

    get { 
     return self.placeholderLabel 
    } 

    set { 
     self.placeholderLabel = newValue 
    } 

    } 

} 

を。

+2

setterは無限ループを引き起こします。 – vadian

+0

内線番号 –

答えて

1

エクステンションにストアドプロパティを設定することはできません。

クラスのプロパティ構造の追加が変更されるため、既存のクラスにプロパティを追加することはできません。また、Objective C、Swift、または他のプログラミング言語ではそれを買う余裕がないため、ストアドプロパティをエクステンションに追加することはできません。

それでは何の問題もありませんか?

は、これは、あなたの拡張機能に保存されているプロパティとしてラベルを保存するために何ができるかです:)どのように動作する

import Foundation 
import UIKit 


fileprivate var ascociatedObjectPointer : UInt8 = 99 

extension UITextField { 
    var myLabel : UILabel { 
     get { 
      return objc_getAssociatedObject(self, &ascociatedObjectPointer) as! UILabel 
     } 
     set { 
      objc_setAssociatedObject(self, &ascociatedObjectPointer, myLabel, .OBJC_ASSOCIATION_RETAIN) 
     } 
    } 
} 

シンプルな変数や、既存のクラスとは関係のないポインタを内部的に保持することで、setterとgetterを記述することで、既存の構造には影響しませんクラス。

希望します。

+0

ありがとうございました、私の友人 – IvanPavliuk

+0

@IvanPavliuk:いつも歓迎仲間:) –

関連する問題