#import "House.h" @interface House() @property (nonatomic, readwrite) int numberOfBedrooms; @end @implementation House -(instancetype)initWithAddress:(NSString*)address { self = [super init]; if(self){ _address = [address copy]; _numberOfBedrooms = 2; _hasHotTub = false; } return self; } @end
Category: Objectiv-C
House Object Diagram
House
*address
int numberOfBedrooms
bool hasHotTub
-> address
#import <Foundation/Foundation.h> @interface House : NSObject @property (nonatomic) NSString *address @property (nonatomic) int numberOfBetrooms; @property (nonatomic) BOOL hasHotTub; @end
#import <Foundation/Foundation.h> #import "House.h" #import <Foundation/Foundation.h> #import "House.h" int main(int argc, const char * argv[]){ @autoreleasepool { House *myHouse = [[House alloc] init]; } return 0; }
Dynamic Method Resolution
#import <Foundation/Foundation.h> #import "Puppy.h" #import "Dealer.h" #import "Drum.h" int main(int argc, const char * argv[]){ @autoreleasepool { Puppy *spot = [[Puppy alloc] init]; Drum *drum = [[Drum alloc] init]; Dealer *cardDealer = [[Dealer alloc] init]; NSArray *array = @[spot, drum, cardDealer]; NSUInteger index = arc4random_uniform(3); id item = [array objectAtIndex:index]; [item play]; } return 0; }
NSMutableArray *attendance = [NSMutableArray arrayWithArray: @[@”Diego”]];
[attendance addObject:@”Rahul”]
NSArray *invited = @[@”Diego”, @”Rahul”, @”Elana”]
Differences:Handling Nil
Objective-C: Any object can be nil
Swift: Optionals can be nil
#import <Foundation/Foundation.h> #import "Messengaer.h" #import "Package.h" int main(int argc, const char * argv[]){ @autoreleasepool { Messenger +spike = [[Messenger alloc] init]; Package *importantDocuments = [spike pickUpPackage]; NSLog(@"package contents: %@", importantDocuments.contents); } return 0; }
Objective-C and Swift approaches to mutability differ
– how mutability is achieved for a given type
– the probability of an unintended mutation propagating through a program
#import <Foundation/Foundation.h> #import "Messengaer.h" #import "Package.h" int main(int argc, const char * argv[]){ @autoreleasepool { NSArray *kayakingGear = [NSMutableArray arrayWithArray:@[@"halmet",@"paddle",@"boat", @"lifejacket"]]; [kayakingGear addObject:@"booties"]; NSLog(@"%@", kayakingGear); } return 0; }
Design pattern
Protocols Enable Shared Functionality Across Classes
pets, dogs, birds, flight, bats, insects
UITextFieldDelegateProtocol in Swift
func textField(textField: UITextField, shouldChangeCharactersInRange range:NSRange, replacementString string: String) -> Bool { var newText = textField.text! as NSString newText = newText.stringByReplacingCharactersInRange(range, withString: string) return newText.length <= 5 }
UITextFieldDelegateProtocol in Objective-C
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ NSString *nexText = textField.text; newText = [newText stringByReplacingCharactersInRange:range withString:string]; return (newText.length <=5); }
Objective-C
Objective-C: Any object can be nil, dynamic typing
Swift: Optionals can be nil, limited mutability
iOS Frameworks Design-Patterns: static typing
// Swift override func viewWillAppear(animated: Bool){ super.viewWillAppear(animated) displayResult() } // Objective-C - (void)viewWillAppear:(BOOL) animated { [super viewWillAppear:animated]; [self displayResult]; }
AppDelegate Methods
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { return true } func applicationWillResignActive(application: UIApplication){ } func applicationDidEnterBackground(application: UIApplication){ } func applicationWillEnterForeground(application: UIApplication){ }
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions { return YES; } - (void)applicationWillResignActive:(UIApplication *)application{ } - (void)applicationDidEnterBackground:(UIApplication *)application { } - (void)applicationWillEnterForeground:(UIApplication *)application { }