ios nsagora #3: objective-c vs. swift

44
Tuesday 29 July, meeting #3

Upload: alex-cristea

Post on 10-May-2015

449 views

Category:

Engineering


10 download

DESCRIPTION

A comparison between Objective-C and an early beta version of Swift. Presentation organised by iOS NSAgora, the iOS Developers Community of Iasi, Romania.

TRANSCRIPT

Page 1: iOS NSAgora #3: Objective-C vs. Swift

Tuesday 29 July, meeting #3

Page 2: iOS NSAgora #3: Objective-C vs. Swift
Page 3: iOS NSAgora #3: Objective-C vs. Swift

3

70

Page 4: iOS NSAgora #3: Objective-C vs. Swift

23 Members

Page 5: iOS NSAgora #3: Objective-C vs. Swift

Objective-C vs. Swift

alexcristea!iOS Dev

Page 6: iOS NSAgora #3: Objective-C vs. Swift

January 9

Page 7: iOS NSAgora #3: Objective-C vs. Swift

1570

Page 8: iOS NSAgora #3: Objective-C vs. Swift

1768

Page 9: iOS NSAgora #3: Objective-C vs. Swift

1951

Page 10: iOS NSAgora #3: Objective-C vs. Swift

2007

Page 11: iOS NSAgora #3: Objective-C vs. Swift
Page 12: iOS NSAgora #3: Objective-C vs. Swift
Page 13: iOS NSAgora #3: Objective-C vs. Swift
Page 14: iOS NSAgora #3: Objective-C vs. Swift
Page 15: iOS NSAgora #3: Objective-C vs. Swift

2008 #42

Page 16: iOS NSAgora #3: Objective-C vs. Swift

2014 #3

Page 17: iOS NSAgora #3: Objective-C vs. Swift
Page 18: iOS NSAgora #3: Objective-C vs. Swift

Modern.Safe.Fast.Fun

Page 19: iOS NSAgora #3: Objective-C vs. Swift

2014 #16

Page 20: iOS NSAgora #3: Objective-C vs. Swift

DISCLAIMER

Page 21: iOS NSAgora #3: Objective-C vs. Swift

21

Page 22: iOS NSAgora #3: Objective-C vs. Swift

vs

Page 23: iOS NSAgora #3: Objective-C vs. Swift

Language

Page 24: iOS NSAgora #3: Objective-C vs. Swift

24

Data  Types

Objective  C Swift

NSInteger Int

double Double

BOOL Bool

NSString String

NSArray Array

id AnyObject

Class AnyClass

SEL Selector

Page 25: iOS NSAgora #3: Objective-C vs. Swift

25

Define  new  Data  Types

Objective  C Swift

@interface class

@protocol protocol

struct struct

enum enum

Page 26: iOS NSAgora #3: Objective-C vs. Swift

26

Extending  existing  Data  Types

Objective  C Swift

categories extension

@interface (categoryName) @end

class a{ } extension a { }

struct b { } extension b{ }

enum b { } extension b{ }

Page 27: iOS NSAgora #3: Objective-C vs. Swift

27

#if __LP64__typedef long NSInteger;typedef unsigned long NSUInteger;#elsetypedef int NSInteger;typedef unsigned int NSUInteger;#endif!#define NSIntegerMax LONG_MAX#define NSIntegerMin LONG_MIN#define NSUIntegerMax ULONG_MAX

Objective-C

Data type definitions

Page 28: iOS NSAgora #3: Objective-C vs. Swift

28

struct Int : SignedInteger { init() init(_ value: Int) .... static var max: Int { get } static var min: Int { get } } !extension Int : Printable { var description: String { get } }

Swift

Data type definitions

Page 29: iOS NSAgora #3: Objective-C vs. Swift

29

@property (nonatomic) NSMutableArray *items;@property (nonatomic, strong) NSArray *immutableItems;@property (nonatomic, weak) id<DelegateProtocol> delegate;

Objective-C

var items:Array<Int> = [] let immutableItems = [1, 2, 3, 4] weak var delegate:DelegateProtocol?

Swift

Properties

Page 30: iOS NSAgora #3: Objective-C vs. Swift

30

@property (nonatomic) DataProcessor *processor;....

- (DataProcessor *)getDataProcessor { if(!_processor) { _processor = [DataProcessor alloc] init]; } return _processor; }

Objective-C

Lazy Properties

Page 31: iOS NSAgora #3: Objective-C vs. Swift

31

@lazy var processor = DataProcessor() var processorPower:Int { get { return processor.power } set(newPower) { self.processor.power = new.power } }

Swift

Lazy Properties

Page 32: iOS NSAgora #3: Objective-C vs. Swift

32

// Algorithm.h+ (int)fibonacci:(int)n;!// Algorithm.m+ (int)fibonacci:(int)n { if (n < 2) return 1; return [self fibonacci:n-1] + [self fibonacci:n-2];}

Objective-C

Methods

Page 33: iOS NSAgora #3: Objective-C vs. Swift

33

class func fibonacci(n: Int) -> Int { if n < 2 { return 1 } return fibonacci(n-1) + fibonacci(n-2) }

Swift

Methods

Page 34: iOS NSAgora #3: Objective-C vs. Swift

34

// UIView.h+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations;!// Usage[UIView animateWithDuration:2 animations:^{ ....}];

Objective-C

Closures

Page 35: iOS NSAgora #3: Objective-C vs. Swift

35

// UIView.swift class func animateWithDuration(duration: NSTimeInterval, animations: (() -> Void)!) !//Usage UIView.animateWithDuration(2.5) { .... }

Swift

Closures

Page 36: iOS NSAgora #3: Objective-C vs. Swift

36

NSArray *arrayOfStrings = @[@"First", @"Second", @2, @"Third"];

Objective-C

var array:Array<Strings> = ["First", "Second", 2, "Third"]

Swift

Generics

Page 37: iOS NSAgora #3: Objective-C vs. Swift

37

operator infix ^ {} func ^ (var base: Int, power: Int) -> Int { var answer = 1; for _ in 1...power { answer = answer * base } return answer } var x = 2^5 // x = 32

Swift

Defining operators

Page 38: iOS NSAgora #3: Objective-C vs. Swift

38

// C Functions func arc4random() -> UInt32

!// Core Graphics Classesfunc CGGradientCreateWithColorComponents( space: CGColorSpace!, components: ConstUnsafePointer<CGFloat>, locations: ConstUnsafePointer<CGFloat>, count: UInt) -> CGGradient!

Swift

C Bridging

Page 39: iOS NSAgora #3: Objective-C vs. Swift

Performance

Page 40: iOS NSAgora #3: Objective-C vs. Swift

40

Performance  (seconds)

Objective-­‐C Swift

fibonacci(10) 0,000 0,000

fibonacci(20) 0,000 0,000

fibonacci(30) 0,011 0,015

fibonacci(40) 1,430 1,535

fibonacci(50) 180,486 192,095

Page 41: iOS NSAgora #3: Objective-C vs. Swift

41

Performance  (seconds)

Objective-­‐C Swift

sum(5000000) 0,026 0,097

sum(8000000) 0,040 0,154

sum(1300000) 0,065 0,263

sum(2100000) 0,103 0,406

sum(3400000) 0,168 0,565

Page 42: iOS NSAgora #3: Objective-C vs. Swift

?

Page 43: iOS NSAgora #3: Objective-C vs. Swift

Open Networking

Page 44: iOS NSAgora #3: Objective-C vs. Swift

Tuesday 29 July, meeting #3