ObjC ++中的Swift属性访问

时间:2017-01-27 12:49:41

标签: objective-c swift class properties wrapper

我有一个大问题!

我尝试在ObjC ++类中使用Swift属性,但没有任何作用!

My 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 ++类.h:

@class G;

在ObjC ++类.mm中:

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

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

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

怎么了? 谢谢你的帮助...

2 个答案:

答案 0 :(得分:1)

你的Objective C代码中的“G”是一个类,所以你想要做的就是从类中获取属性,而不是该类的实例。

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

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

@objc class G: NSObject {

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

答案 1 :(得分:1)

感谢您的回复。它的工作! 但是我改变了一点因为我想将属性保留为静态属性。

在我班G:

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

所以我可以修改另一个Swift类中的值。

在我的ObjC课程中,我使用:

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

非常感谢!