Cannot access Swift var from Objective-C View controller - iOS
Solution 1
You will have to declare the variable as public
.
By default, the variables have internal
access, that means they can be accessed only from inside their module. Obj-C code is not in their module.
Solution 2
Swift 4:
Use @objc keyword to access the swift variable.
class Car: NSObject {
@objc let name: String
@objc let numberOfWheels: Int
let manufacturer: String
}
Solution 3
I had the same issue with an ObjectiveC enum, that was a variable in a Swift class and wasn't accessible in ObjectiveC.
Declaring the variable as public didn't work, instead I had to give the enum a default value when declaring it, for it to be included in the [project]-Swift.h header.
var firstQuestion: AnswerResult = AnswerNone
The following didn't work:
var firstQuestion: AnswerResult!
Solution 4
With these all answers, sometimes compiler doesn't generate appropriate obj-c code for our swift code. In that case,
Just clean & build project.
Supertecnoboff
I’m Daniel Sadjadian - Car enthusiast, computer programmer & entrepreneur running my own business. I live life to the max and try my best to get the most out of each day. Every moment counts :)
Updated on June 05, 2022Comments
-
Supertecnoboff almost 2 years
I have an app with both Objective-C and Swift based view controllers. I am programatically opening a Swift based view controller from one of my Objective-C based view controllers. The problem I am having is that I can't access the Swift variables from my Objective-C code.
My Swift code:
@IBOutlet weak var profPicture: UIImageView! @IBOutlet weak var profVerified: UIImageView! @IBOutlet weak var profName: UILabel! var passedUser:PFUser!
My Objective-C code:
MyProfileViewController *screen = [[MyProfileViewController alloc] initWithNibName:@"Main" bundle:nil]; self.dataPass = screen; dataPass.profName.text = @""; screen.modalTransitionStyle = UIModalTransitionStyleCoverVertical; [self presentViewController:screen animated:YES completion:nil];
I am able to access @ properties like IBOutlets, but I can't access and edit the var objects.
I am doing this, because I want to pass data into the Swift based view controller from the Objective-C based view controller when I am presenting the Swift based view controller.
Why can't I access the var objects?
Here is the error I am getting:
The error is as follows:
Property 'passedUser' not found on object of type 'MyProfileViewController *'
Thanks for your time, Dan.