#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 {
}