COMBINING SWIFT AND OBJECTIVE-C AGENDA Using Objective-C from - - PowerPoint PPT Presentation
COMBINING SWIFT AND OBJECTIVE-C AGENDA Using Objective-C from - - PowerPoint PPT Presentation
COMBINING SWIFT AND OBJECTIVE-C AGENDA Using Objective-C from Swift Using Swift from Objective-C Objective-C Behavior in Swift Classes IMPORTING OBJECTIVE-C INTO SWIFT APPLE FRAMEWORKS No additional setup required! import UIKit import
COMBINING SWIFT AND OBJECTIVE-C
AGENDA
Using Objective-C from Swift Using Swift from Objective-C Objective-C Behavior in Swift Classes
IMPORTING OBJECTIVE-C INTO SWIFT
APPLE FRAMEWORKS
No additional setup required!
import UIKit import Foundation
OBJECTIVE-C WITHIN SAME TARGET
Add Objective-C files to the Bridging-Header Bridging-Header needs to be referenced in build settings
Project- Bridging- Header.h A.swift B.swift MyObj.h Car.h MyObj.m Car.m
THIRD PARTY FRAMEWORKS
If framework is built as a module: No additional setup required
import Parse
THIRD PARTY FRAMEWORKS
If framework is written in Obj-C And framework is not built as a module Add framework header to bridging-header:
#ifndef Makestagram_Makestagram_Bridging_Header_h #define Makestagram_Makestagram_Bridging_Header_h #import <Parse/Parse.h> #endif
CALLING OBJECTIVE-C FROM SWIFT
CALLING OBJ-C FROM SWIFT
Most syntax translates almost 1-1 Special rules for initializers
INITIALIZERS
[[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
UITableView(frame: CGRectZero, style: .Grouped) [UIColor colorWithRed:0.5 green:0.0 blue:0.5 alpha:1.0]; UIColor(red: 0.5, green: 0.0, blue: 0.5, alpha: 1.0)
METHODS
[myTableView insertSubview:mySubview atIndex:2]; myTableView.insertSubview(mySubview, atIndex: 2)
PROPERTIES
myTextField.textColor = UIColor.darkGrayColor()
OPTIONALITY IN OBJ-C
Since latest release of Objective-C we can specify whether values can be nil or not For unaudited APIs: Implicitly unwrapped Optionals by default!
OPTIONALITY IN OBJ-C
// unaudited version -> generates warning + (UIView *)createViewWithName:(NSString *)name; // return value and argument are non-optional + (__nonnull UIView *)createViewWithNameSwiftier:(__nonnull NSString *)name; // return value and argument are optional + (__nullable UIView *)createViewWithNameSwiftierNullable:(__nullable NSString *)name;
USING SWIFT FROM OBJECTIVE-C
SWIFT WITHIN SAME TARGET
AppName
- Swift.h
A.swift B.swift MyObj.h Car.h MyObj.m Car.m
NSOBJECT SUBCLASSES
class SimpleNSObject: NSObject { } #import "InteropTest-Swift.h"
- (void)test {
SimpleNSObject *simple2 = [[SimpleNSObject alloc] init]; }
SWIFT ROOT CLASS
@objc public class Simple { public class func newInstance() -> Simple { return Simple() } } #import "InteropTest-Swift.h"
- (void)test {
Simple *simple = [Simple newInstance]; }
OBJECTIVE-C BEHAVIOR IN SWIFT CLASSES
OBJECTIVE-C BEHAVIOR IN SWIFT CLASSES
class User { dynamic var name: String dynamic func setUp() { //... } }