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
340
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
240
Swift rEvolution
konstantinkoval
1
270
Refactoring an Ugly Objective-C with Swift
konstantinkoval
0
280
React Native - from a mobile (iOS) developer prospective
konstantinkoval
0
96
WatchKit
konstantinkoval
0
110
Intro in WatchKit and Watch apps
konstantinkoval
0
110
Functional Swift
konstantinkoval
1
180
I love swift.pdf
konstantinkoval
1
230
Other Decks in Programming
See All in Programming
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
390
S3 TablesのIcebergデータに、AIエージェントからアクセスしてみた / 20261016developersio2026joetsu-accessing-iceberg-in-s3tables-via-agent
kasacchiful
PRO
0
230
複雑なUIコンポーネントとの ⻑い付き合い⽅:波及するバグからテスト戦略を経て、安全な再設計へ
mixplace
0
480
PyConTW 2026 - AI Coding 不只是工具升級, 區域醫院醫療資訊系統協作開發與資訊團隊轉型實踐
cclai999
0
210
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
290
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
200
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
340
月間100万人のサービス刷新で、 技術選定をHonoに振り切った話
yutobara
8
7k
コードで差別化できない時代の ソフトウェアエンジニアリング / Software Engineering in an Era Where Code Doesn’t Differentiate
kishida
2
210
React Native에 현대적인 빌드 도구 더하기: Rollipop 구현기
leegeunhyeok
0
150
私なりのハーネスエンジニアリング ~独自の言語処理系の開発を通して~
seosoft
0
120
動画プレイヤーはなぜカクつくのか 〜Flutterのレンダリングとネイティブの境界を解剖する〜
naruogram
0
230
Featured
See All Featured
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
650
Technical Leadership for Architectural Decision Making
baasie
3
620
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.5k
The browser strikes back
jonoalderson
0
1.9k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.9k
RailsConf 2023
tenderlove
30
1.6k
Faster Mobile Websites
deanohume
310
32k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
640
Un-Boring Meetings
codingconduct
0
470
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
650
Ruling the World: When Life Gets Gamed
codingconduct
0
420
Agile that works and the tools we love
rasmusluckow
331
22k
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