SWIFT STANDARD LIBRARY FOUNDATION
CORE FOUNDATION
AGENDA Three standard libraries Bridging Swift Standard Library highlights
THREE STANDARD LIBRARIES
WHY THREE STANDARD LIBS? Swift Standard Library: Written entirely in Swift, no dependency on Obj-C Foundation: Written in Obj-C, Core Framework for Cocoa development Core Foundation: Written primarily in C. Powers many Foundation features. Created as common ground for Cocoa and Carbon
Swift Standard Library Foundation Core Foundation
SWIFT STANDARD LIBRARY Data Structures and fundamental types: Array, Dictionary, String, Int Optionals and other language features have protocol counterparts in the standard library (make Swift very extensible) Swift Standard Library is still very small, no date calculation, no URL loading, no file system access, etc.
SWIFT STANDARD LIBRARY
Consists mostly of structs, enums and protocols Array, Dictionary, Int, String, etc. are implemented as structs
FOUNDATION Data Structures, e.g.: NSArray, NSDictionary, Date and Times, e.g.: NSDate, NSCalendar URL Loading System, e.g.: NSURLSession File System Access: NSFileManager
FOUNDATION All foundation types are implement as classes Immutable is the default: NSString, NSArray Mutable classes are available when necessary: NSMutableString, NSMutableArray
BRIDGING
BRIDGING Most Core Foundation types are toll free bridged to their Foundation counterparts Most Foundation types are toll free bridged to their Swift Standard Library counterparts More details in the Swift-Obj-C intro lecture
BRIDGING
Swift handles the length of Unicode strings correctly,
Foundation’s NSString does not More on this on next slides!
SWIFT STANDARD LIBRARY HIGHLIGHTS
STRINGS Strings in Swift 2 aren’t collections, they don’t have a length The amount of characters visible to a user and the amount of code points to represent these characters can differ 😁 Accessing individual characters is an O(n) operation
OPTIONALS Are implemented as part of the Swift Standard Library Optionals are enums: public enum Optional : _Reflectable, NilLiteralConvertible { case None case Some(T) //... }
switch optionalValue { case let .Some(value): print(value) case .None: print("Nothing") }
OPTIONALS And ImplicitlyUnwrappedOptional is an enum, too!
PROTOCOLS Protocols are essential building block of the Swift standard library, make it extensible Want to create a type that can be created from a string? struct Car: StringLiteralConvertible { //… } let car: Car = "Mercedes"
Implementation details: Gist: Implement StringLiteralConvertible on custom type
ADDITIONAL RESOURCES
ADDITIONAL RESOURCES Swift Standard Library Reference Strings in Swift 2 History on creation of CoreFoundation Swift Literal Convertible