无法从Objective-C View控制器 - iOS访问Swift var

时间:2015-11-02 13:56:33

标签: ios objective-c swift properties var

我有一个包含Objective-C和基于Swift的视图控制器的应用程序。我以编程方式从我的一个基于Objective-C的视图控制器打开一个基于Swift的视图控制器。我遇到的问题是我无法从Objective-C代码访问Swift变量。

我的Swift代码:

@IBOutlet weak var profPicture: UIImageView!
@IBOutlet weak var profVerified: UIImageView!
@IBOutlet weak var profName: UILabel!
var passedUser:PFUser!

我的Objective-C代码:

MyProfileViewController *screen = [[MyProfileViewController alloc] initWithNibName:@"Main" bundle:nil];
self.dataPass = screen;
dataPass.profName.text = @"";
screen.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentViewController:screen animated:YES completion:nil];

我能够访问像IBOutlets这样的@属性,但我无法访问和编辑var对象。

我这样做,因为当我呈现基于Swift的视图控制器时,我想从基于Objective-C的视图控制器将数据传递到基于Swift的视图控制器。

为什么我无法访问var对象?

以下是我遇到的错误:

enter image description here

错误如下:

  

在类型对象上找不到属性'passUser'   'MyProfileViewController *'

谢谢你的时间,Dan。

5 个答案:

答案 0 :(得分:8)

斯威夫特4:

使用 @objc 关键字访问swift变量。

class Car: NSObject {
    @objc let name: String
    @objc let numberOfWheels: Int
    let manufacturer: String
}

答案 1 :(得分:6)

您必须将变量声明为public

默认情况下,变量具有internal访问权限,这意味着只能从模块内部访问它们。 Obj-C代码不在他们的模块中。

答案 2 :(得分:4)

我对ObjectiveC枚举有同样的问题,这是Swift类中的一个变量,在ObjectiveC中无法访问。

将变量声明为public并不起作用,而是在声明它时我必须给枚举一个默认值,因为它包含在[project] -Swift.h头中。

 var firstQuestion: AnswerResult = AnswerNone

以下没有成功:

var firstQuestion: AnswerResult!

答案 3 :(得分:0)

有了所有这些答案,有时编译器无法为我们的swift代码生成适当的obj-c代码。在这种情况下,

只需清理并构建项目。

答案 4 :(得分:-1)

您需要对变量使用 @objc public 以将其公开给 Objective-C:

@IBOutlet @objc public weak var profName: UILabel!