I created Objective C Header file. and added some properties in it.
i declared
static NSString* const kColor005C98 = @"005C98";
in Constants.h
file
I defined this file in Bridging-Header file as #import "Constants.h"
Now when i want to use this property kColor005C98
in some swift file it failed the build and i am getting
Undefined symbols for architecture armv7: "_kColor005C98", referenced from:
i don't know what else i need to do so i don't get this error? (i have used this property in other objective C file successfully and no issue in that case)
Update:
As of Swift 2/Xcode 7 and later, a static constant definition like
is imported to Swift and can be used without problems.
(Old answer for Swift 1.x) When the code
is processed by an Objective-C compiler, it is treated as two things combined into one statement:
See for example What is the difference between a definition and a declaration? for a good explanation of the difference between declaration and definition.
The Swift compiler treats the statement only as a declaration. Therefore the variable is not defined anywhere, causing the linker error.
To solve the problem, you have to move the definition to an Objective-C file:
and change the declaration to an
extern
declaration:Alternatively, you can just remove the
static
modifier:to make it work with Swift. The disadvantage is that when this line is included by multiple Objective-C files, all of them will define a globally visible symbol
kColor005C98
, causing "duplicate symbol" linker errors.Another alternative is to use a macro definition instead: