2016-10-18 6 views
-1

Swift Programming Language 3.0の本では、拡張機能を使ってストアドプロパティを追加することはできません。Swiftに拡張機能を介して静的に格納された変数を追加できますか?

インスタンス変数が格納されていて、Xcodeが期待どおりにエラーを表示しました。

しかし、静的に格納された変数で試したところ、すべてがうまくコンパイルされました。

私は行方不明または間違っていることがありますか?

+1

はい、静的に格納された変数を追加できますが、これはタイプがMyClassで、特定のインスタンス(myVariableなど)とは無関係です。 –

+1

関連リンクを使用して拡張機能にプロパティを追加する方法については、http://stackoverflow.com/questions/25426780/how-to-have-stored-properties-in-swift-the-same-way-i-had-on-objetive-cを参照してください。オブジェクト。 –

答えて

0

エクステンションのインスタンスに格納されたプロパティを置くことはできませんが、ちょっと騙してObjective-C関連オブジェクトで同じ効果を得ることができます。次のコードを試してみる:

private var associationKey: UInt8 = 0 
var validationTypes: ValidationTypes { 
     get { 
      return objc_getAssociatedObject(self, &associationKey) as? ValidationTypes ?? [] 
     } 
     set(newValue) { 
      objc_setAssociatedObject(self, &associationKey, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN) 
     } 
    } 

は明らかに適切にValidationTypesを交換します。

+1

これはSwift 2.3のコードであることに注意する価値があるかもしれません。そのため、Swift 3.0で作業している場合には構文的な変更が軽微な場合があります。 –

関連する問題