Swift 属性 在 ObjC++ 中访问

Swift property access in ObjC++

我有一个大问题!

我尝试在 ObjC++ class 中使用 Swift 属性 但没有任何效果!

我的 Swift Class :

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
}

在 ObjC++ 中 class.h :

@class G;

在 ObjC++ 中 class .mm :

#import "PROJECT-Swift.h"
...

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

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

怎么了? 感谢您的帮助...

"G" 在你的 Objective C 代码中是一个 class,所以你似乎想做的是从 [=26] 中得到一个 属性 =], 不是 class.

的实例

您可以从 class 的实例(或对象)访问 属性,因此 G 需要成为您的 initWithFrame 中的参数,或者它需要在您的 Obj-C 对象中成为它自己的 属性(例如 self.G.hST)。

您可以做的另一件事是将 hST 属性 声明为 class 函数(例如,看 at this related question)。即:

@objc class G: NSObject {

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

感谢您的回复。是工作 ! 但我做了一点改动,因为我想将 属性 保持为静态 属性.

在我的 class G:

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

所以我可以修改另一个里面的值 Swift class.

在我的 ObjC class 中,我使用:

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

非常感谢!