Your SlideShare is downloading. ×
0
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Денис Лебедев, Swift
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Денис Лебедев, Swift

338

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
338
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
4
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Swift Denis Lebedev, iOS @ Yandex
  • 2. Agenda • Introduction • Objective-C bridging • Good-to-know features • “Where can I Swift?”
  • 3. Swift Chris Lattner, Swift creator
  • 4. Swift • Multi-paradigm • Static, inferred typing • Bridged with Objective-C • No pointers
  • 5. –Someone at WWDC Keynote It’s like “Objective-C without C.”
  • 6. Swift features • Namespacing* • Generic classes & functions • Named/default parameters • Functions are first class citizens • Optional types
  • 7. Optionals • Used in situations where value may be absent • Alternative for obj-c nil passing • works with any type
  • 8. Optionals - (NSInteger)indexOfObject:(id)object;
  • 9. Optionals func indexOf(object: AnyObject) -> Int?
  • 10. Forced unwrapping let result :Int? = indexOf(bar); let s = String(result) //error let s = String(result!)
  • 11. Optional binding if let r = result { let s = String(r) } else { // r is nil }
  • 12. Classes, structs, enums • Classes passed by reference, structs - by value • Using a struct has no runtime penalty • All scalars and even Bool are structs
  • 13. Collections • Array, Dictionary • Collections are structs • Implicitly bridged to Cocoa collection types
  • 14. Built-in immutability var b = 3 b += 1 let a = 3 a += 1 // error
  • 15. Dictionary immutability let d = ["key0": 0] d["key"] = 3 //error d.updateValue(1, forKey: "key1") //error
  • 16. Array immutability let c = [1, 2, 3] c[0] = 3 // success c.append(5) // fail
  • 17. Array immutability let c = [1, 2, 3] c[0] = 3 // success c.append(5) // fail It’s a bug: https://devforums.apple.com/message/971330#971330
  • 18. Extensions • extends any named type (struct, enum, class) • structures code
  • 19. Extensions struct Foo { let value : Int } extension Foo : Printable { var description : String { get {return "Foo"} } } extension Foo : Equatable { } func ==(lhs: Foo, rhs: Foo) -> Bool { return lhs.value == rhs.value }
  • 20. What Swift is missing • Preprocessor • Exceptions • Access control * • KVO, KVC • Compiler attributes (platforms, deprecations, etc.) • performSelector: is unavailable
  • 21. Objective-C bridging • Call Obj-c from Swift • Call Swift from Objc with limitations • Call CoreFoundation types directly • C++ is not allowed (should be wrapped in Objc) • Subclassing Swift classes not allowed in Objc
  • 22. Objective-C bridging • NSArray < - > Array • NSDictionary < - > Dictionary • NSNumber - > Int, Double, Float
  • 23. Objective-C bridging @objc class Foo { init (bar: String) { /*...*/ } }
  • 24. Objective-C bridging @objc(objc_Foo) class Foo { @objc(initWithBar:) init (bar: String) { /*...*/ } }
  • 25. Objective-C bridging Foo *foo = [[Foo alloc] initWithBar:@"Bar"];
  • 26. Objective-C bridging func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath
  • 27. Objective-C bridging • All object types are mapped as implicitly unwrapped optionals (T!) • All ‘id’ types are mapped as ‘AnyObject’
  • 28. Swift internals • Swift objects are Obj-c objects • Implicit root class ‘SwiftObject’ • Ivars type encoding is stored separately • Method’s vtable
  • 29. Name mangling • Swift keeps function metadata encoded in function symbols
  • 30. Name mangling class Foo { func bar() -> Bool { return false } } _TFC9test3Foo3barfS0_FT_Sb
  • 31. Compiler features • Profile-guided optimization (‘off’ by default) • Loop vectorisation (‘on’ by default from Xcode 6) • High-level language-specific optimizer and IR before LLVM (‘xcrun swift t.swift -O -emit-sil')
  • 32. Performance • 10-100 x slower than C++ (-O0) • 10 x slower than C++ (-O3) • 1 x as C++ (-Ofast)*
  • 33. Performance • Swift is still in beta • Unoptimized calls of retain/release in loops
  • 34. Pattern matching let point = (0, 1) if point.0 == 0 && point.1 == 0 { println("Point is at the origin") } else if point.0 >= 0 && point.0 <= 1 && point.1 >= 0 && point.1 <= 1 { println("I") } ...
  • 35. Pattern matching let point = (0, 1) switch point { case (0, 0): println("Point is at the origin") case (0...1, 0...1): println("I") case (-1...0, 0...1): println("II") case (-1...0, -1...0): println("III") case(0...1, -1...0): println("IV") default: println(“I don’t know.") }
  • 36. Function currying func add(a: Int)(b: Int) -> Int { return a + b } let foo = add(5)(b: 3) // 8 let add5 = add(5) // (Int) -> Int let bar = add5(b: 3) // 8
  • 37. Auto closures • Wraps function argument in explicit closure func assert(condition:() -> Bool, message: String) { #if DEBUG if !condition() { println(message) } #endif } assert({5 % 2 == 0}, "5 isn't an even number.")
  • 38. Cross-platform code #if os(iOS) typealias View = UView #else typealias View = NSView #endif class MyControl : View { }
  • 39. Auto closures Wraps function argument in explicit closure func assert(condition: @auto_closure () -> Bool, message: String) { #if DEBUG if !condition() { println(message) } #endif } assert(5 % 2 == 0, "5 isn't an even number.")
  • 40. Implicit type conversion struct Box<T> { let _value : T init (_ value: T) { _value = value } } let value = Box(1) value + 3 //error
  • 41. Implicit type conversion extension Box { @conversion func __conversion() -> T { return value } } let value = Box(3 + 3) value + 3 //9
  • 42. Implicit type conversion • allows any type to be ‘nil’ (which has NilType) • allows toll-free-bridging with Cocoa types
  • 43. Reflection struct Foo { var str = "Apple" let int = 13 func foo() { } } reflect(Foo()).count // 2 reflect(Foo())[0].0 // "str" reflect(Foo())[0].1.summary // "Apple
  • 44. Direct call of C functions @asmname - attribute that allows to provide a Swift interface for C functions @asmname("my_c_func") func my_c_func(UInt64, CMutablePointer<UInt64>) -> CInt;
  • 45. Scripting and REPL • xcrun swift - launches REPL • xcrun -i ‘file.swift’ - executes script
  • 46. Where can I swift? • BDD Testing framework: Quick • Reactive programming: RXSwift • Model mapping: Crust • Handy JSON processing: SwiftyJSON
  • 47. Thx! @delebedev
  • 48. Credits • http://nondot.org/sabre/ • https://devforums.apple.com/thread/227288 • http://andelf.github.io/blog/2014/06/08/swift-implicit-type-cast/ • https://www.youtube.com/watch?v=Ii-02vhsdVk • http://www.eswick.com/2014/06/inside-swift/ • http://article.gmane.org/gmane.comp.compilers.clang.devel/37217 • http://stackoverflow.com/questions/24101718/swift-performance-sorting-arrays • http://www.splasmata.com/?p=2798 • https://github.com/rodionovd/SWRoute/wiki/Function-hooking-in-Swiftкак

×