无法从 Objective-C 视图控制器访问 Swift var - iOS
Cannot access Swift var from Objective-C View controller - iOS
我有一个应用同时包含基于 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 对象?
这是我收到的错误:
错误如下:
Property 'passedUser' not found on object of type
'MyProfileViewController *'
丹,谢谢你的时间。
您必须将变量声明为 public
。
默认情况下,变量具有 internal
访问权限,这意味着它们只能从其模块内部访问。 Obj-C 代码不在他们的模块中。
我在 ObjectiveC 枚举中遇到了同样的问题,它是 Swift class 中的一个变量,在 ObjectiveC 中无法访问。
将变量声明为 public 无效,相反,我必须在声明它时给枚举一个默认值,以便它包含在 [project]-Swift.h header.
var firstQuestion: AnswerResult = AnswerNone
以下无效:
var firstQuestion: AnswerResult!
Swift 4:
使用 @objc 关键字访问 swift 变量。
class Car: NSObject {
@objc let name: String
@objc let numberOfWheels: Int
let manufacturer: String
}
有了这些所有答案,有时编译器不会为我们的 swift 代码生成合适的 obj-c 代码。那样的话,
清理并构建项目。
您需要对变量使用 @objc public
才能将其公开给 Objective-C:
@IBOutlet @objc public weak var profName: UILabel!
我有一个应用同时包含基于 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 对象?
这是我收到的错误:
错误如下:
Property 'passedUser' not found on object of type 'MyProfileViewController *'
丹,谢谢你的时间。
您必须将变量声明为 public
。
默认情况下,变量具有 internal
访问权限,这意味着它们只能从其模块内部访问。 Obj-C 代码不在他们的模块中。
我在 ObjectiveC 枚举中遇到了同样的问题,它是 Swift class 中的一个变量,在 ObjectiveC 中无法访问。
将变量声明为 public 无效,相反,我必须在声明它时给枚举一个默认值,以便它包含在 [project]-Swift.h header.
var firstQuestion: AnswerResult = AnswerNone
以下无效:
var firstQuestion: AnswerResult!
Swift 4:
使用 @objc 关键字访问 swift 变量。
class Car: NSObject {
@objc let name: String
@objc let numberOfWheels: Int
let manufacturer: String
}
有了这些所有答案,有时编译器不会为我们的 swift 代码生成合适的 obj-c 代码。那样的话,
清理并构建项目。
您需要对变量使用 @objc public
才能将其公开给 Objective-C:
@IBOutlet @objc public weak var profName: UILabel!