Swift vs Objective-C
iOS Application Project
We can write both Swift and Objective-C at the same project.
Certainly, we have to decide base project language.(Objective-C, Swift)
But, we can call each other to use Bridge Header, or Swift Header
Example(Combined)
Objective-C base AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
// Objective-C
//self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
//self.window.rootViewController = [[ObjcViewController alloc] init];
//[self.window makeKeyAndVisible];
// Swift
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = [[SwiftViewController alloc] init];
[self.window makeKeyAndVisible];
return YES;
}
Objective-C ViewController Example
Header
#import <UIKit/UIKit.h> @interface ObjcViewController : UIViewController @end
Code
#import "ObjcViewController.h"
@interface ObjcViewController ()
@property (nonatomic) UIImageView *imageView;
@property (nonatomic) UILabel *titleLabel;
@end
@implementation ObjcViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
self.imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"SteveJobs"]];
self.titleLabel = [[UILabel alloc] init];
self.titleLabel.text = @"Stay hungry, stay foolish!";
self.titleLabel.textAlignment = NSTextAlignmentCenter;
[self.view addSubview:self.imageView];
[self.view addSubview:self.titleLabel];
}
- (void)viewWillLayoutSubviews {
CGRect frame = self.view.frame;
self.imageView.frame = CGRectMake((frame.size.width - 200.0) / 2.0, 100, 200, 100);
self.titleLabel.frame = CGRectMake(0, CGRectGetMaxY(self.imageView.frame), frame.size.width, 40);
}
@end
Swift ViewController Example
import Foundation
import UIKit
@objc class SwiftViewController : UIViewController {
private var imageView : UIImageView?
private var titleLabel : UILabel?
override func viewDidLoad() {
self.view.backgroundColor = UIColor.whiteColor()
self.imageView = UIImageView(image: UIImage(named: "SteveJobs"))
self.titleLabel = UILabel()
self.titleLabel?.text = "Stay swift, stay foolish!"
self.titleLabel?.textAlignment = .Center
self.view.addSubview(self.imageView!)
self.view.addSubview(self.titleLabel!)
}
override func viewWillLayoutSubviews() {
let frame : CGRect = self.view.frame
self.imageView?.frame = CGRectMake((frame.width - 200) / 2.0, 100, 200, 100)
self.titleLabel?.frame = CGRectMake(0, CGRectGetMaxY((self.imageView?.frame)!), frame.width, 40)
}
}
Swift is not need to create header file
Swift
- Swift still uses ARC(Automatic Reference
- Swift is faster(Run level, Compiler level) than swift
- we can call each other, Swift can call Objective-C class, Objective-C can call Swift class(Objective-C support class)
- UIKit(iOS UI base class) is still Objective-C
Swift Compiler is optimised compare to Objective-C
This is the reason that Swift is faster.
