Reputation: 415
For Example, say if I have a class like so with a static variable pi.
let pi: Double = 3.1415926
class MyClass {
// ...
}
How can I allow Objective C code to use the static variable pi? The projectName-Swift.h class will have auto generated code like so (just a small example and not 100 percent accurate).
SWIFT_CLASS("_MyClass")
@interface MyClass : NSObject
- (instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end
So pi isn't being added to projectName-Swift.h. This is a small example on what is going on with my project and perhaps it should generate the static variable and I am missing something. Any tips or suggestions to fix this or make this work will be appreciated.
Upvotes: 13
Views: 12313
Reputation: 789
You also need to indicate that they are public
@objc public class MyClass {
@objc public static let pi = 3.14
}
Upvotes: 1
Reputation: 896
I would make pi static and put it inside MyClass. Also add @objc infront of each of them like this.
@objc class MyClass {
@objc static let pi = 3.14
}
Then in your objective C code you can call it like this
CGFloat piValue = MyClass.pi;
Upvotes: 4
Reputation: 409
You can't access Swift global variables on Objective C.
You’ll have access to anything within a class or protocol that’s marked with the @objc attribute as long as it’s compatible with Objective-C. This excludes Swift-only features such as those listed here:
- Generics
- Tuples
- Enumerations defined in Swift
- Structures defined in Swift
- Top-level functions defined in Swift
- Global variables defined in Swift
- Typealiases defined in Swift
- Swift-style variadics
- Nested types
- Curried functions
Using Swift with Cocoa and Objective-C
Check this post too.
Upvotes: 30