デフォルトのプロパティUIImageView
を持っています。これはisFlipped
です。私はUIImageView
をサブクラス化し、1つのプロパティーisFlipped
を追加することでそれを行うことができます。 しかし、私はこのためにユーザープロトコルと拡張機能を使いたいと思っていますが、いつか後でクラッシュしています。以下は私のコードです。どのようにして正しい方法で使用できますか?ありがとうSwiftのプロトコル拡張3
-1
A
答えて
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
関連する問題
- 1. プロトコル拡張のSwiftプロパティオブザーバ?
- 2. Swift 2.0のプロトコル拡張メソッドディスパッチ
- 3. プロトコルと拡張機能swift
- 4. Swift 3の配列拡張
- 5. 拡張エラーSwift 3 JSON
- 6. Swiftのプロトコル拡張オブジェクトがクラスでプロトコルに準拠する
- 7. ObjCプロトコルのプロトコル拡張
- 8. プロトコル拡張エラーアレイ
- 9. プロトコル拡張のスウィフトクロージャ
- 10. Swiftの配列の拡張3
- 11. Swift 3配列の拡張エラー
- 12. Swiftのプロトコル拡張からインスタンスメソッドをオーバーライドする方法は?
- 13. swift 3.0 - UITextFieldDelegateプロトコルの拡張機能が動作しない
- 14. Swift 4プロトコル拡張 - 簡易イニシャライザのデフォルト実装
- 15. Swiftプロトコル拡張 `var {get}`オーバーライド実装の `let`
- 16. プロトコル拡張のデフォルト値
- 17. プロトコルの拡張子とサブクラス
- 18. 自己がサブクラスであるSwiftプロトコル拡張
- 19. Swift 3オプションのプロトコル用バインド
- 20. UIApplicationDelegateプロトコルを拡張する
- 21. Swift 2 Iterator拡張がSwiftで動作しない3
- 22. スウィフト3:拡張
- 23. プロトコル拡張の静的プロパティへのアクセス
- 24. UIViewControllerの自己制約プロトコルの拡張
- 25. OkHttpプロトコルの選択を拡張する
- 26. スウィフト、使用プロトコルの拡張デフォルト
- 27. Swift 3 ns測定のカスタム拡張? Ex。羊のヤギへの
- 28. Swift UIColor拡張のベストプラクティス
- 29. Swiftクラス拡張のドキュメントコメント
- 30. プロパティのSwift拡張イベントリスナー
「いつかクラッシュする」というエラーメッセージは何ですか? – paper1111
セッターが何度も呼び出していて、クラッシュしました。 –
あなたのプロパティgetterとsetterは再帰的に呼び出します。たとえば、http://stackoverflow.com/questions/25348049/override-a-setter-in-swiftを参照してください。 - クラス拡張にストアドプロパティを追加することはできません(関連付けられたオブジェクトを使用しない限り)。 –