2017-01-27 21 views
0

大きな問題があります!ObjC++のSwiftプロパティへのアクセス

私はObjC++クラスでSwiftプロパティを使用しようとしましたが、何も動作しません!

マイスウィフトクラス:にObjC++クラス.mmで

@class G; 

間違って何
#import "PROJECT-Swift.h" 
... 

- (id)initWithFrame:(CGRect)frame { 
    NSLog(@"Property : %@", [G sizeST]); 

    // With static var 
    NSLog(@"Property : %f", G.hST); 
} 

にObjC++クラスの.hで

let wST:CGFloat = 200 

@objc class G: NSObject { 
    private override init() {} 

    class func sizeST() -> CGSize { return CGSize(width: wST, height: 200)} 
    // Another test 
    static var hST:CGFloat = 200 
} 

? あなたのお手伝いをありがとう...

答えて

1

"G" Objective Cコードはクラスなので、しようとしているように見えるのは、そのクラスのインスタンスではなくクラスからプロパティを取得することです。

あなたはクラスのインスタンス(またはオブジェクト)からのプロパティにアクセスすることができますので、あなたのGinitWithFrameのパラメータにする必要があるか、それはあなたのObj-Cのオブジェクト(例えばself.G.hST)に独自のプロパティである必要があります。

もう1つは、hSTプロパティをclass関数として宣言することです(例:at this related question)。つまり:

@objc class G: NSObject { 

    class func hST() -> CGFloat { 
     return 200 
    } 
} 
0

ご回答ありがとうございます。それは仕事です! しかし、静的なプロパティとしてプロパティを保持したいので少し変更します。

static var _hST:CGFloat = 300.0 
static func hST() -> CGFloat { return _hST } 

だから私は別のスウィフトクラス内の値を変更することができます。私のクラスGで

。私にObjCクラスで

、私が使用します。

NSLog(@"hST -> %f", [G hST]); 

おかげでたくさん!

関連する問題