William Alex
William Alex

Reputation: 415

iOS: How can Objective C code read static variables in Swift?

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

Answers (3)

Booharin
Booharin

Reputation: 789

You also need to indicate that they are public

@objc public class MyClass { 
    @objc public static let pi = 3.14
}

Upvotes: 1

candyline
candyline

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

eduardoeof
eduardoeof

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

Related Questions