Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Swift - Pushing technology limits
Search
Konstantin
April 30, 2015
Programming
330
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Swift - Pushing technology limits
Why Swift is Awesome!!!
Konstantin
April 30, 2015
More Decks by Konstantin
See All by Konstantin
How does complier see your app
konstantinkoval
3
200
Swift Package Manager
konstantinkoval
2
230
Swift rEvolution
konstantinkoval
1
270
Refactoring an Ugly Objective-C with Swift
konstantinkoval
0
270
React Native - from a mobile (iOS) developer prospective
konstantinkoval
0
94
WatchKit
konstantinkoval
0
110
Intro in WatchKit and Watch apps
konstantinkoval
0
100
Functional Swift
konstantinkoval
1
170
I love swift.pdf
konstantinkoval
1
230
Other Decks in Programming
See All in Programming
Embedded Swiftで作る自作USBデバイス によるiOSデバイスの自動テスト / iOSDC Japan 2026 glassfiber
glassfiber
0
280
速習iPhone Duo対応
yuukiw00w
2
940
JPUG勉強会 OSSデータベースの内部構造を理解しよう(第2回)
oga5
0
290
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
170
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
4
410
更なる可用性を求めて、5年間運用したKotlinのアプリケーションをGoでリプレイスする話
ken_tunc
0
430
Verilogで学ぶCPU自作入門.pdf
uyuki234
8
4k
技術的負債を組織課題として解く-増えすぎたマイクロサービスとの戦い-
reimaru
1
2.6k
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
530
Simple Storage Service(S3) is not simple
iwatsukayura
0
120
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
5.3k
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
Featured
See All Featured
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
340
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.9k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
520
Making the Leap to Tech Lead
cromwellryan
135
10k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Odyssey Design
rkendrick25
PRO
2
850
Skip the Path - Find Your Career Trail
mkilby
1
240
Unsuck your backbone
ammeep
672
58k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
4
1.2k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
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