从Swift类访问Objective-c基类的实例variables

有一个Objective C基类:

@interface ObjcClass : NSObject { NSString *aVariable_; } 

和一个快速的子类:

 class SwiftClass : ObjcClass { func init() { // aVariable_ can't be accessed here. An Objective-c derived // class has direct access to it's super's instance variables! } } 

如何从SwiftClass访问ObjcClass SwiftClass

伟大的查询。 我们努力去完成这件事。 唯一的工作解决scheme,我发现

通过使用self.valueForKey("aVariable_")来获取值

使用self.setValue("New Value", forKey: "aVariable_")设置值self.setValue("New Value", forKey: "aVariable_")

希望有所帮助。 可能的解决scheme,而不改变超级类。

我找不到一个“正确”的方式来做到这一点,但我需要很好的工作。 我的解决scheme是在我的Objective C超类中创build一个简单的getter方法,如下所示:

头文件

 @interface ObjcClass : NSObject { NSString *myVariable; } - (NSString *)getMyVariable; 

在执行文件中

 - (NSString *)getMyVariable { return myVariable; } 

我很乐意听到更好的方法,但这至less起作用。

我为此搜寻了很多。 最终我改变了我的代码:

 @interface PrjRec : NSObject { @public NSString* name; } @end 

至:

 @interface PrjRec : NSObject { } @property NSString* name; @end 

类似于@JasonTyler解决scheme。 然后我可以用简单的点符号<object instance>.name从Swift代码访问我的对象属性,

但是我需要改变所有现有的Objective-C引用

 <object instance>->name 

至:

 <object instance>.name 

要么

 _name 

如果是课堂单元。

我希望有一个更好的解决scheme。

如果你愿意有一个财产,那么你可以创造财产,以适应您的需求。

 @interface ObjcClass : NSObject { NSString *aVariable_; } @property (nonatomic) NSString *aVariable_; 

 @implementation ObjcClass @synthesize aVariable_ = aVariable_; 

这允许variables作为inst->aVariable_inst.aVariable_被访问。 在Objective C类中,variables可以作为variablesaVariable_self.aVariable_被访问。

我真的不知道为什么有人做了实例variables(一个,默认情况下是私有的)vs属性。 看看乔治·卡尔佐拉托(Giorgio Calzolato)对此的回答(除了最后一句关于寻找更好的解决scheme – 这是最好的解决scheme:))。

在我的情况下,我已经有一个财产,并为什么它不工作额外困惑。 但是我意识到这个属性有一个自定义时间,需要将它添加到我的SDK-Bridging-Header.h文件中。

所以如果你的属性设置为这样的自定义types:

 @property (nonatomic, weak) IBOutlet SDKMyCustomObject *customObject; 

然后记得把它添加到桥头。

这对我来说是一个很好的解决scheme,只需添加一个Swiftvariables:

 var myInstanceVar: String { return self.value(forKey: "myInstanceVar") as! String }