Call Swift class from Objective-C
Apply Objective-C class for Swift code
Basically, we cannot use swift class from Objective-C
In this entry, we use Swift Framework from Objective-C App.
Swift code
import Foundation
public class Region : NSObject {
public class func getRegion() -> String {
return NSLocale.currentLocale().objectForKey(NSLocaleCountryCode) as! String
}
public class func isSupported() -> Bool { // only for Japan
return self.getRegion() == "JP"
}
}
Objective-C class
Swift class should be extended NSObject to use swift from Objective-C
If you skip extend class, the class becomes swift class.
If you want to use class which is not NSObject class, you need to add @objc annotation before class
@objc class Region {
}
And you want to change the name for Objective-C?
@objc(RegionObjc) class Region {
}
Header
After build, you can see Swift header from your framework.
SWIFT_CLASS("_TtC13SDKTechSample6Region")
@interface Region : NSObject
+ (NSString * __nonnull)getRegion;
+ (BOOL)isSupported;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end
XCode Build Setting
To use swift class, we need to change Build Setting
Objective-C code
#import "ViewController.h"
#import <SDKTechSample/SDKTechSample-Swift.h>
@interface ViewController ()
@property (nonatomic) UIImageView *imageView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"%@", [Region getRegion]);
}
@end
