【问题标题】:Swift property access in ObjC++ObjC++ 中的 Swift 属性访问
【发布时间】:2017-01-27 12:49:40
【问题描述】:

我有一个大问题!

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

我的 Swift 课程:

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);
}

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

【问题讨论】:

    标签: objective-c swift class properties wrapper


    【解决方案1】:

    “G”在您的 Objective C 代码中是一个类,所以您似乎试图做的是从一个类中获取一个属性,而不是该类的一个实例。

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

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

    @objc class G: NSObject {
    
        class func hST() -> CGFloat {
           return 200
        }
    }
    

    【讨论】:

      【解决方案2】:

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

      在我的 G 班:

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

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

      在我的 ObjC 类中,我使用:

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

      非常感谢!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-14
        • 1970-01-01
        • 1970-01-01
        • 2020-03-15
        • 1970-01-01
        • 1970-01-01
        • 2019-07-31
        • 2015-06-09
        相关资源
        最近更新 更多