2017-05-19 20 views
-1

デフォルトのプロパティUIImageViewを持っています。これはisFlippedです。私はUIImageViewをサブクラス化し、1つのプロパティーisFlippedを追加することでそれを行うことができます。 しかし、私はこのためにユーザープロトコルと拡張機能を使いたいと思っていますが、いつか後でクラッシュしています。以下は私のコードです。どのようにして正しい方法で使用できますか?ありがとうSwiftのプロトコル拡張3

+0

「いつかクラッシュする」というエラーメッセージは何ですか? – paper1111

+0

セッターが何度も呼び出していて、クラッシュしました。 –

+0

あなたのプロパティgetterとsetterは再帰的に呼び出します。たとえば、http://stackoverflow.com/questions/25348049/override-a-setter-in-swiftを参照してください。 - クラス拡張にストアドプロパティを追加することはできません(関連付けられたオブジェクトを使用しない限り)。 –

答えて

2

名前が付いているように、クラス拡張にクラスに格納されたプロパティを追加することはできません。しかし、目的のCに関連するオブジェクトを使用して拡張子を使って行うことができます

private var key: Void? 

extension UIImageView { 
    public var isFlipped: Bool? { 
     get { 
      return objc_getAssociatedObject(self, &key) as? Bool 
     } 

     set { 
      objc_setAssociatedObject(self, 
            &key, newValue, 
            .OBJC_ASSOCIATION_RETAIN_NONATOMIC) 
     } 
    } 
} 
+0

ありがとう!!それは働いていますが、自分のコードを使って計算されたプロパティを使ってどうすればいいのか知りたいです。可能であれば教えてください。 –

+0

計算され格納されていないプロパティが必要な場合は、目的のCコードは必要ありません。 get {}ブロックを変更して独自のコードを実行できます。計算されている場合は、おそらくset {}ブロックを削除したいでしょう。あなたが何をしようとしているかわからないので、私の反応はかなり一般的です – Spads

関連する問題