Presenter: Neha Sinha, Mindfire Solutions Date: 10/06/2015 Swift vs Objective C
Presenter: Neha Sinha, Mindfire Solutions One of the goals of the new Swift programming language was to be interoperable with the older Objective-C What we will deal with in today’s seminar? •Compare Language Syntax •Compare Data Types •Use Swift & Objective C in the same project.
Presenter: Neha Sinha, Mindfire Solutions Why Care about This? Many years of Objective-C code Patterns & practices developed in Objective-C Swift provides features Objective-C can’t.
Interoperability is not equal Demand is greater for new Swift to existing Objective-C Swift understands Objective-C better than Objective-C understands Swift. Swift provides features Objective-C doesn’t recognize.
5 Swift: func getNameAndAge() -> (String, Int) { return (“Neha”, 25) } Objective-C: ? Tuples
Instantiating Objects Swift: var myDate = NSDate() Objective-C: NSDate* myDate = [NSDate alloc] init];
Using Initializers Swift: let myTableView: UITableView = UITableView(frame: CGRectZero, style: Grouped) Objective-C: UITableView* myTableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
Mapping Factory Methods Swift: let color = UIColor(red: 0.5, green: 0.0, blue: 0.5, alpha: 1.0) Objective-C: UIColor* color = [UIColor colorWithRed:0.5 green:0.0 blue:0.5 alpha:1.0]; Factory methods & Objective-C classes are typically just mapped to their equivalent normal Swift initializers.
Failable Initialization Objective-C: UIImage* myImage = [UIImage imageWithContentsOfFile:@“”]; An Objective-C initializer can return ‘nil’. Swift demands that variables & constants always exist in a valid state.
Failable Initialization Swift: var image: UIImage? = UIImage(contentsOfFile: filePath) if image != nil { return image! }
Calling Methods Swift: myTbView.layoutIfNeeded() myTbView.insertSubView(mySubView, atIndex:2) Objective-C: [myTbView layoutIfNeeded]; [myTbView insertSubView:mySubView atIndex:0];
id & AnyObject Reference Swift includes a protocol type named AnyObject that represents any kind of object, just as id does in Objective-C. var myObject: AnyObject = UITableViewCell() myObject = NSDate() let futureDate = myObject.dateByAddingTimeInterval(10) let timeSinceNow = myObject.timeIntervalSinceNow
id & AnyObject Reference myObject.characterAtIndex(5) // crash, myObject doesn't respond to that method let myChar = myObject.characterAtIndex?(5) if let fifthCharacter = myObject.characterAtIndex?(5) { println("Found (fifthCharacter) at index 5") }
Swift & Objective C Strings Swift automatically bridges between the String type and the NSString class. import Foundation let greeting = "hello, world!" let capitalizedGreeting = greeting.capitalizedString import Foundation let myString: NSString = "123" if let integerValue = (myString as String).toInt() { println("(myString) is the integer (integerValue)") }
Arrays, Dictionaries & Numbers Arrays: When you bridge from an NSArray object to a Swift array, the resulting array is of type [AnyObject]. let swiftArray = foundationArray as [AnyObject] if let downcastedSwiftArray = swiftArray as? [NSView] { // downcastedSwiftArray contains only NSView objects } for aView in foundationArray as! [NSView] { // aView is of type UIView } This cast is a forced cast, and results in a runtime error if the cast does not succeed.
Arrays, Dictionaries & Numbers Arrays: When you bridge from a Swift array to an NSArray object, the elements in the Swift array must be AnyObject compatible. let schoolSupplies: NSArray = ["Pencil", "Eraser", "Notebook"] // schoolSupplies is an NSArray object containing NSString objects
Arrays, Dictionaries & Numbers Dictionaries: When you bridge from an NSDictionary object to a Swift dictionary, the resulting dictionary is of type [NSObject: AnyObject]. The Swift compiler replaces the NSDictionary class with [NSObject: AnyObject] when it imports Objective-C APIs. When you cast in the reverse direction, from a Swift dictionary to an NSDictionary object —the keys and values must be instances of a class or bridgeable to an instance of a class.
Arrays, Dictionaries & Numbers Numbers: Swift automatically bridges certain native number types, such as Int and Float, to NSNumber All of the following types are automatically bridged to NSNumber: • Int • UInt • Float • Double • Bool let n = 42 let m: NSNumber = n
Working with NSError in Swift Error reporting in Swift follows the same pattern it does in Objective-C, with the added benefit of offering optional return values. var writeError: NSError? let written = myString.writeToFile(path, atomically: false, encoding: NSUTF8StringEncoding, error: &writeError) if !written { if let error = writeError { println("write failure: (error.localizedDescription)") }}
Swift & Objective C: Mix and Match You can ‘Mix n Match’ Objective-C & Swift in the same project. • Bridging header file — Swift & Objective-C need to be informed about other classes in the same project in a different way. • We use 2 bridging headers — One lets our Objective-C classes know about Swift & the other vice-versa.
Inheriting between Languages Swift: class MySwiftViewController: UIViewController { // define the class } Objective-C: @class MySwiftClass; @interface MyObjcClass : NSObject{ // define the class }
Migrating from Objective C to Swift The most effective approach for migrating code to Swift is on a per-file basis, that is, one class at a time. Because you can’t subclass Swift classes in Objective-C, it’s best to choose a class in your app that doesn’t have any subclasses. You’ll replace the .m and .h files for that class with a single .swift file.
The Future Favors Swift Swift: The more approachable, full-featured language • Easier to maintain • Is Considered Safer & Faster • Is Unified with Memory Management • Encourages interactive coding
Presenter: Neha Sinha, Mindfire Solutions Questions?
References https://developer.apple.com/library http://www.infoworld.com/article/2920333/mobile- development/swift-vs-objective-c-10-reasons-the-future- favors-swift.html?page=2 http://mobileoop.com/the-comparison-between-swift-and- objective-c-programming-language
Presenter: Neha Sinha, Mindfire Solutions Thank You
www.mindfiresolutions.com https://www.facebook.com/MindfireSolutions http://www.linkedin.com/company/mindfire-solutions http://twitter.com/mindfires

Swift vs Objective-C

  • 1.
    Presenter: Neha Sinha,Mindfire Solutions Date: 10/06/2015 Swift vs Objective C
  • 2.
    Presenter: Neha Sinha,Mindfire Solutions One of the goals of the new Swift programming language was to be interoperable with the older Objective-C What we will deal with in today’s seminar? •Compare Language Syntax •Compare Data Types •Use Swift & Objective C in the same project.
  • 3.
    Presenter: Neha Sinha,Mindfire Solutions Why Care about This? Many years of Objective-C code Patterns & practices developed in Objective-C Swift provides features Objective-C can’t.
  • 4.
    Interoperability is notequal Demand is greater for new Swift to existing Objective-C Swift understands Objective-C better than Objective-C understands Swift. Swift provides features Objective-C doesn’t recognize.
  • 5.
    5 Swift: func getNameAndAge() ->(String, Int) { return (“Neha”, 25) } Objective-C: ? Tuples
  • 6.
    Instantiating Objects Swift: var myDate= NSDate() Objective-C: NSDate* myDate = [NSDate alloc] init];
  • 7.
    Using Initializers Swift: let myTableView:UITableView = UITableView(frame: CGRectZero, style: Grouped) Objective-C: UITableView* myTableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
  • 8.
    Mapping Factory Methods Swift: letcolor = UIColor(red: 0.5, green: 0.0, blue: 0.5, alpha: 1.0) Objective-C: UIColor* color = [UIColor colorWithRed:0.5 green:0.0 blue:0.5 alpha:1.0]; Factory methods & Objective-C classes are typically just mapped to their equivalent normal Swift initializers.
  • 9.
    Failable Initialization Objective-C: UIImage* myImage= [UIImage imageWithContentsOfFile:@“”]; An Objective-C initializer can return ‘nil’. Swift demands that variables & constants always exist in a valid state.
  • 10.
    Failable Initialization Swift: var image:UIImage? = UIImage(contentsOfFile: filePath) if image != nil { return image! }
  • 11.
  • 12.
    id & AnyObjectReference Swift includes a protocol type named AnyObject that represents any kind of object, just as id does in Objective-C. var myObject: AnyObject = UITableViewCell() myObject = NSDate() let futureDate = myObject.dateByAddingTimeInterval(10) let timeSinceNow = myObject.timeIntervalSinceNow
  • 13.
    id & AnyObjectReference myObject.characterAtIndex(5) // crash, myObject doesn't respond to that method let myChar = myObject.characterAtIndex?(5) if let fifthCharacter = myObject.characterAtIndex?(5) { println("Found (fifthCharacter) at index 5") }
  • 14.
    Swift & ObjectiveC Strings Swift automatically bridges between the String type and the NSString class. import Foundation let greeting = "hello, world!" let capitalizedGreeting = greeting.capitalizedString import Foundation let myString: NSString = "123" if let integerValue = (myString as String).toInt() { println("(myString) is the integer (integerValue)") }
  • 15.
    Arrays, Dictionaries &Numbers Arrays: When you bridge from an NSArray object to a Swift array, the resulting array is of type [AnyObject]. let swiftArray = foundationArray as [AnyObject] if let downcastedSwiftArray = swiftArray as? [NSView] { // downcastedSwiftArray contains only NSView objects } for aView in foundationArray as! [NSView] { // aView is of type UIView } This cast is a forced cast, and results in a runtime error if the cast does not succeed.
  • 16.
    Arrays, Dictionaries &Numbers Arrays: When you bridge from a Swift array to an NSArray object, the elements in the Swift array must be AnyObject compatible. let schoolSupplies: NSArray = ["Pencil", "Eraser", "Notebook"] // schoolSupplies is an NSArray object containing NSString objects
  • 17.
    Arrays, Dictionaries &Numbers Dictionaries: When you bridge from an NSDictionary object to a Swift dictionary, the resulting dictionary is of type [NSObject: AnyObject]. The Swift compiler replaces the NSDictionary class with [NSObject: AnyObject] when it imports Objective-C APIs. When you cast in the reverse direction, from a Swift dictionary to an NSDictionary object —the keys and values must be instances of a class or bridgeable to an instance of a class.
  • 18.
    Arrays, Dictionaries &Numbers Numbers: Swift automatically bridges certain native number types, such as Int and Float, to NSNumber All of the following types are automatically bridged to NSNumber: • Int • UInt • Float • Double • Bool let n = 42 let m: NSNumber = n
  • 19.
    Working with NSErrorin Swift Error reporting in Swift follows the same pattern it does in Objective-C, with the added benefit of offering optional return values. var writeError: NSError? let written = myString.writeToFile(path, atomically: false, encoding: NSUTF8StringEncoding, error: &writeError) if !written { if let error = writeError { println("write failure: (error.localizedDescription)") }}
  • 20.
    Swift & ObjectiveC: Mix and Match You can ‘Mix n Match’ Objective-C & Swift in the same project. • Bridging header file — Swift & Objective-C need to be informed about other classes in the same project in a different way. • We use 2 bridging headers — One lets our Objective-C classes know about Swift & the other vice-versa.
  • 21.
    Inheriting between Languages Swift: classMySwiftViewController: UIViewController { // define the class } Objective-C: @class MySwiftClass; @interface MyObjcClass : NSObject{ // define the class }
  • 22.
    Migrating from ObjectiveC to Swift The most effective approach for migrating code to Swift is on a per-file basis, that is, one class at a time. Because you can’t subclass Swift classes in Objective-C, it’s best to choose a class in your app that doesn’t have any subclasses. You’ll replace the .m and .h files for that class with a single .swift file.
  • 23.
    The Future FavorsSwift Swift: The more approachable, full-featured language • Easier to maintain • Is Considered Safer & Faster • Is Unified with Memory Management • Encourages interactive coding
  • 24.
    Presenter: Neha Sinha,Mindfire Solutions Questions?
  • 25.
  • 26.
    Presenter: Neha Sinha,Mindfire Solutions Thank You
  • 27.