Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Swift - Pushing technology limits
Search
Konstantin
April 30, 2015
Programming
1
220
Swift - Pushing technology limits
Why Swift is Awesome!!!
Konstantin
April 30, 2015
Tweet
Share
More Decks by Konstantin
See All by Konstantin
How does complier see your app
konstantinkoval
4
120
Swift Package Manager
konstantinkoval
2
160
Swift rEvolution
konstantinkoval
1
230
Refactoring an Ugly Objective-C with Swift
konstantinkoval
0
210
React Native - from a mobile (iOS) developer prospective
konstantinkoval
0
61
WatchKit
konstantinkoval
0
57
Intro in WatchKit and Watch apps
konstantinkoval
0
51
Functional Swift
konstantinkoval
1
130
I love swift.pdf
konstantinkoval
1
180
Other Decks in Programming
See All in Programming
Hotwire or React? ~Reactの録画機能をHotwireに置き換えて得られた知見~ / hotwire_or_react
harunatsujita
8
4.1k
Tuning GraphQL on Rails
pyama86
2
1k
Realtime API 入門
riofujimon
0
110
qmuntal/stateless のススメ
sgash708
0
120
飲食業界向けマルチプロダクトを実現させる開発体制とリアルな現状
hiroya0601
1
390
VR HMDとしてのVision Pro+ゲーム開発について
yasei_no_otoko
0
100
What’s New in Compose Multiplatform - A Live Tour (droidcon London 2024)
zsmb
1
340
カスタムしながら理解するGraphQL Connection
yanagii
1
1.2k
Kubernetes for Data Engineers: Building Scalable, Reliable Data Pipelines
sucitw
1
200
Java ジェネリクス入門 2024
nagise
0
600
OpenTelemetryでRailsのパフォーマンス分析を始めてみよう(KoR2024)
ymtdzzz
4
1.6k
現場で役立つモデリング 超入門
masuda220
PRO
13
2.9k
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
95
5.2k
How to train your dragon (web standard)
notwaldorf
88
5.7k
How GitHub (no longer) Works
holman
311
140k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
27
4.2k
Done Done
chrislema
181
16k
Building Applications with DynamoDB
mza
90
6.1k
Designing for Performance
lara
604
68k
Imperfection Machines: The Place of Print at Facebook
scottboms
264
13k
GitHub's CSS Performance
jonrohan
1030
460k
Happy Clients
brianwarren
97
6.7k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
37
1.8k
Transcript
Kostiantyn Koval 1 Rocketfarm.no
Swift - Pushing technology limits
How should look Modern Language?
Clean and Clear
Programs must be written for people to read, and only
incidentally for machines to execute 1 Harold Abelson
.global _start .text _start: # write(1, message, 13) mov $1,
%rax mov $1, %rdi mov $message, %rsi mov $13, %rdx syscall message: .ascii "Hello, world\n" mov rax, 1 mov rdi, 1 mov rsi, message mov rdx, 13 syscall
None
int compare(const void * a, const void * b) {
if ( *(uint32_t*)a < *(uint32_t*)b ) { return -1; } if ( *(uint32_t*)a > *(uint32_t*)b ) { return 1; } return 0; }
!
@interface Person : NSObject @property (nonatomic) NSString* name; @property (nonatomic)
NSInteger age; @end @implementation Person - (instancetype)initWith:(NSString *)name age:(NSInteger)age { self = [super init]; if (self) return nil; _name = name; _age = age; return self; } @end @implementation TestPerson - (void)test { NSArray *people = @[ [[Person alloc] initWith:@"Sam" age:10], [[Person alloc] initWith:@"Sara" age:24], [[Person alloc] initWith:@"Ola" age:42], [[Person alloc] initWith:@"Jon" age:19]]; NSArray *kids = [people filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"age < 18"]]; NSMutableArray *names = [NSMutableArray new]; for (Person *person in people) { [names addObject:person.name.lowercaseString]; } } @end
!
struct Person { let name: String let age: Int }
let people = [ Person(name: "Sam", age: 10), Person(name: "Sara", age: 24), Person(name: "Ola", age: 42), Person(name: "Jon", age: 19)] let kids = people.filter { person in person.age < 18 } let names = people.map { $0.name.lowercaseString }
!
60% Less Code 13 Lines Vs 34 Lines
Less Code Less Bugs Less money
Type inference var age = 19 var name = "Sara"
var isEmpty = name.isEmpty VS var age: Int = 19 var name: String = "Sara" var isEmpty: Bool = name.isEmpty
No Semicolons ; var age = 19
Other 4 Closures 4 Default initializers 4 Default parameters 4
Subscripts 4 Operators
//Closures let numbers = [1, 2, 3, 4] numbers.map {$0
+ 10} // Subscripts let num2 = numbers[2] //Operators infix operator <<< { } func <<< (a: Vector, b: Vector) -> Vector { return Vector(x: a.x + b.x, y: a.y + b.y) }
Smart
Features Rich
Features Reach 4 Functional Programming 4 OOP 4 Generic Purpose
4 Value types 4 Tuples 4 Optionals 4 ...
Safe
Safe 4 Types 4 Type casting 4 tUpos 4 Existing
Methods 4 Correct instructions - Exception
None
Error Handling func readFromFile(file: String) -> (result: String?, error: NSError?)
{ return ("file Content", nil) } let result = readFromFile("file.txt") if result.error != nil { println("handle error") }
Optionals
Optionals 4 Represent absence of a value 4 Safe Nil
handling [NullPointerException] 4 Nil value for Value type, Int: 0, -1, NSnotFound, IntMax
'?' Type String != String? Int != Int? func person(name:
String) -> Person func person(name: String, age: Int?) -> Person person("Elvis", age: nil) person(nil, age: 27) //Error
Optionals Is a Box that could store a value inside
or could be empty You can interact with the value only throw Box API
Safe var person: Person? = people.find("Elvis") // 1 - Unwrapping
`!` if person != nil { println("found \(person!)") } //2 - Optional binding if let person = person { println("found \(person)") } else { println("found found") }
Multithreading
Multithreading 4 Immutable value type 4 explicit 'self' capturing processAsync(var
people: [Peope]) -> [Peope] { // ... Run Async people.remove(...) return people } var people: [People] //Async code processAsync(people) processAsync(people) processAsync(people)
Fast
Fast 18 Times > Objetive-C 2,9 Times > C
Let's make better mistakes tomorrow
Thanks! QA?? ! Twitter - @KostiaKoval GitHub - /KostiaKoval Kostiantyn
Koval - Rocketfarm.no