2017-02-01 9 views
0

私はカスタムクラスを持っていますが、これを拡張してストアドプロパティを追加したいと考えています。私は常にnilを取得し、デバッグ中拡張オブジェクト内に関連オブジェクトを持つストアドプロパティを設定しました

private func makeConnectionsWithParents(forArray sorce: ProductCategory) { 
    for var cheesItem in sorce.childCategories! { 
     if cheesItem.childCategories != nil { 
      cheesItem.parent = sorce 
      makeConnectionsWithParents(forArray: cheesItem) 
     } 
    } 
} 

が、setメソッドで、newValueには、正しく受信されています。私はそのようなこのプロパティの設定を行う

import ObjectiveC 

var kSomeKey = "s" 

extension ProductCategory { 
    var parent: ProductCategory? { 
     get { 
      return objc_getAssociatedObject(self, &kSomeKey) as? ProductCategory 
     } 
     set(newValue) { 
      objc_setAssociatedObject(self, &kSomeKey, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) 
      print(parent ?? "not set") 
     } 
    } 
} 

:私のコードは、そのように見えます。 あなたは、アドバイスをしてください、この問題はどこですか?

このアプローチをUINavigationControllerのような標準的な項目に適用すると、それは適切に機能します。

+1

はProductCategory @objCクラスであるか、NSObjectの由来? –

+0

@ Daij-Djanその構造体です。まあ、私は問題があると思います。それで、結合されたオブジェクトの使い方で構造体を拡張することは可能ですか? – Melany

答えて

1

これはクラス(構造体ではない)とobjcと互換性のあるオブジェクトの場合にのみ有効です。この問題を回避するための

、以下を参照してください。https://wezzard.com/2015/10/09/associated-object-and-swift-struct/

+0

@ Daij-Djan、ありがとう!私はこの記事を読んだが、クラスの拡張が行われた拡張を支払わなかった – Melany

関連する問題