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 Weekly 7/26
Search
Johnlin
July 26, 2016
Programming
1
170
Swift Weekly 7/26
Johnlin
July 26, 2016
Tweet
Share
More Decks by Johnlin
See All by Johnlin
用 MLIR 實作 一個 Ruby IR (intermediate representation)
johnlinvc
0
63
Unearth Ruby builtin Gems 發掘 Ruby 的內建 Gems
johnlinvc
0
210
Ruby 型別檢查工具簡介
johnlinvc
0
410
Swift Actor 實作探索
johnlinvc
0
140
用 mruby 來寫跨平台工具
johnlinvc
0
60
Actor model 簡介
johnlinvc
0
160
一起玩 Helm 3
johnlinvc
1
100
為什麼 App 卡卡的
johnlinvc
2
1.1k
如何使用 byebug 來除錯 Ruby 程式
johnlinvc
0
170
Other Decks in Programming
See All in Programming
Amazon Nova Reelの可能性
hideg
0
200
ESLintプラグインを使用してCDKのセオリーを適用する
yamanashi_ren01
2
230
良いユニットテストを書こう
mototakatsu
11
3.6k
AHC041解説
terryu16
0
370
.NETでOBS Studio操作してみたけど…… / Operating OBS Studio by .NET
skasweb
0
120
GitHub CopilotでTypeScriptの コード生成するワザップ
starfish719
26
6k
Оптимизируем производительность блока Казначейство
lamodatech
0
950
Lookerは可視化だけじゃない。UIコンポーネントもあるんだ!
ymd65536
1
130
DevFest - Serverless 101 with Google Cloud Functions
tunmise
0
140
今年のアップデートで振り返るCDKセキュリティのシフトレフト/2024-cdk-security-shift-left
tomoki10
0
360
functionalなアプローチで動的要素を排除する
ryopeko
1
200
PSR-15 はあなたのための ものではない? - phpcon2024
myamagishi
0
400
Featured
See All Featured
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.2k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
500
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Unsuck your backbone
ammeep
669
57k
The Power of CSS Pseudo Elements
geoffreycrofte
74
5.4k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
Building Better People: How to give real-time feedback that sticks.
wjessup
366
19k
GraphQLの誤解/rethinking-graphql
sonatard
68
10k
Git: the NoSQL Database
bkeepers
PRO
427
64k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.4k
The Pragmatic Product Professional
lauravandoore
32
6.4k
Building Flexible Design Systems
yeseniaperezcruz
328
38k
Transcript
Swift पใ 7/26 John Lin @johnlinvc
From the core • Swift 3.0 ࠷৽࣌ఔ • Swift open
source ൛։࢝ࢧԉ Playground
Swift 3.0 ࠷৽࣌ఔ • 7/27 ੋड breaking change త࠷ޙҰఱ •
7/27 ။౼ཁዎኄ႔ཧೝՄୠؐᔒመ࡞తमվ • 8/1 ։࢝౼ Swift 4 • Swift 3 త ᚙߦؐᔒ֬ఆɼୠҰఆࡏ 7/27 ೭ޙ
Evolution • SE-0077 վਐӡࢉࢠએࠂ • SE-0110 ეᄸҰTuple ᢛ ଟჩᏐവᏐ •
SE-0111 വᏐతჩᏐඪតෆ࠶ੋܕผతҰ෦㟨 • SE-0113 ුᴍᏐ৽⃧ਐҐ/ࣺڈവᏐ
SE-0077 վਐӡࢉࢠએࠂ // Before infix operator <> { precedence 100
associativity left } // After precedencegroup ComparationPrecedence { associativity: left higherThan: LogicalAndPrecedence } infix operator <> : ComparationPrecedence
SE-0110 ეᄸҰTuple ᢛ ଟჩ ᏐവᏐ let fn1 : (Int, Int)
-> Void = { x in // The type of x is the tuple (Int, Int). } let fn2 : (Int, Int) -> Void = { x, y in // The type of x is Int, the type of y is Int. } // Future let fn1 : ((Int, Int)) -> Void = { x in // The type of x is the tuple (Int, Int). }
SE-0111 വᏐతჩᏐඪតෆ࠶ੋ ܕผతҰ෦㟨 func viewExistAt(x:Int, y:Int) -> Bool { return
false } func deleteViewAt(dangerX:Int, dangerY:Int) -> Bool { print("") return true } var f :(x: Int, y: Int) -> Bool = viewExistAt f(x: 1,y: 2) f = deleteViewAt f(x: 1,y: 2) //
SE-0111 വᏐతჩᏐඪតෆ࠶ੋ ܕผతҰ෦㟨 // ະိ let f : (x: Int,
y: Int) -> Bool //။㗞ੜࡨޡ // ೳ༻ let f : (Int, Int) -> Bool // ݺڣ࣌ෆೳትlabel f(1,2)
SE-0113 ුᴍᏐ৽⃧ਐҐ/ࣺڈവ Ꮠ • FloatingPoint ৽⃧ round , rounded വᏐ
• แؚ֤छਐҐ/ࣺڈํ๏ɼ toNearestOrAwayFromZero(࢛ࣺޒೖɼ༬ઃᆴ),up(ແ ᑍ݅ਐҐ),down(ແᑍࣺ݅ڈ), towardZero, awayFromZero, toNearestOrEven(IEEE 754 default) • (4.5).rounded() == 5.0 • (4.1).rounded(.up) == 5.0
Evolution • SE-0086 ҠআFoundation త NS લஔࢺ • SE-0091 վਐ
Protocol தత operator એࠂํࣜ • SE-0107 UnsafeRawPointer API • SE-0109 Ҡআ Boolean protocol
SE-0086 ҠআFoundation త NS લஔࢺ
SE-0086 ҠআFoundation త NS લஔࢺ • جຊ্શ။ҠআNS ։಄ɼআྃҎԼزݸྫ֎ • Obj-c
ಛ༗త: NSObject, NSAutoreleasePool … • ฏ༗᮫త: NSUserNotification, NSBackgroundActivity … • ༗value ൛త: NSArray, NSString…
SE-0086 ҠআFoundation త NS લஔࢺ • ᄸ७ҠআNS ։಄త༗ 86 ݸ
Classɻ แؚ: NSBundle, NSTimeInterval, NSURLRequest… • ။վ໊త༗ 100 ݸ Classɻ แؚ: NSStringEncoding, NSNumberFormatterStyle… • ྻද SE-0086 • ᔒྻग़ိత။อཹ NS ։಄ • ။༗ migrator
SE-0091 վਐ Protocol தత operator એࠂํࣜ //ݱࡏ struct Foo {}
protocol Equatable { func ==(lhs: Self, rhs: Self) -> Bool } extension Foo: Equatable {} func ==(lhs: Foo, rhs: Foo) -> Bool { return lhs.value == rhs.value }
SE-0091 վਐ Protocol தత operator એࠂํࣜ //ະိ protocol Equatable {
func ==(lhs: Self, rhs: Self) -> Bool } struct Foo: Equatable { let value: Int static func ==(lhs: Foo, rhs: Foo) -> Bool { return lhs.value == rhs.value } }
SE-0107 UnsafeRawPointer API • ৽⃧શᔒ༗Type త Unsafe[Mutable]RawPointerɼሢ༻ိදࣔهԱᱪ • ݱ༗తUnsafe[Mutable]Pointer<Void> ။ඃ
Unsafe[Mutable]RawPointer
SE-0109 Ҡআ Boolean protocol • Ҡআ Boolean protocol • جຊ্ෆ။Өڹݱ༗ఔࣜ
Evolution • SE-0112 վਐ NSError bridging • SE-0114 ሡ Buffer
త Value վҝ Header • SE-0115 Literal protocol վ໊ • SE-0118 Closure ჩᏐվ໊
SE-0112 վਐ NSError bridging • ݱ༗త NSError bridging ༗ࡾݸ •
ErrorProtocol ᔒ㭎๏ఏڙ userInfo • Obj-C ိత API ᔒ㭎๏፤౸ userInfo • ༗Ұࠣ NSError * ჩᏐᔒ༗౸
SE-0112 վਐ NSError bridging • ৽⃧ࡾݸErrorProtocol LocalizedError, RecoverableError, CustomNSError •
Obj-c աိత Error ။༗ userInfo property • Ⴋᰨత NSError ҝ ErrorProtocol
SE-0114 ሡ Buffer త Value վҝ Header • ManagedBuffer<Value, Element>
ሡ။Ꮣ ManagedBuffer<Header, Element>
SE-0115 Literal protocol վ໊ • *LiteralConvertible ሡ။Ꮣ ExpressibleBy*Literal struct Age
: IntegerLiteralConvertible{ var value:Int init(integerLiteral val:IntegerLiteralType){ value = val } } let turtle:Age = 100 turtle.value
SE-0118 Closure ჩᏐվ໊ • ෦വᏐత closure label վ໊ • words.sort(isOrderedBefore:
>) -> words.sort(by: >)
Evolution • SE-0101 Ҡআ sizeofɼ৽⃧ MemoryLayout • SE-0116 Obj-C API
త id ။Import Any • SE-0120 मվ partition വᏐ • SE-0121 Ҡআ Optional తൺֱӡࢉ • SE-0124 Int.init(ObjectIdentifier) ৽⃧ bitPattern ඪត
SE-0101 Ҡআ sizeofɼ৽⃧ MemoryLayout • Ҡআ sizeof, sizeofValue, alignof, alignofValue,
strideof, strideofValue • ৽⃧ MemoryLayout • MemoryLayout.of(1).size //8
SE-0116 Obj-C API త id ။Import Any • ݱࡏObj-C
API త id ྨผੋImport AnyObjectɼ ॴҎValue త݅बෆೳ༻ • ະိ။ Import Anyɼൺֱํศ༻
SE-0120 मվ partition വᏐ • ݱ༗తpartition ੋڅ partition sort ༻త
var n = [5, 1, 2, 3, 6, 7, 8] let p = n.partition() //3 n // [3, 1, 2, 5, 6, 7, 8] • Ҡআݱ༗తɼ৽⃧partition(by:)ɼճၚᆴతࠨᬑੋ false తݩૉɼӈᬑੋ true తݩૉ var n = [5, 1, 2, 3, 6, 7, 8] let p = n.partition(by: { $0 > 2 }) // 2 n // [2, 1, 5, 3, 6, 7, 8]
SE-0121 Ҡআ Optional తൺֱӡ ࢉ • Optional ݱࡏՄҎී௨ᆴ၏ൺֱେখɼOptional Ӭԕ။খԙී௨ᆴɻ༗త࣌ީ။༗ҙ֎త݁Ռ struct
Person{ var name:String var age:Int? } let people=[ Person(name:"John", age:29), Person(name:"Ive", age: .none) ] let kids = people.filter{$0.age<20} kids // [{name "Ive", nil}]
SE-0121 Ҡআ Optional తൺֱӡ ࢉ • ະိ Optional ሡᔒ༗㭎๏ී௨ᆴൺେখɻ •
ୠੋ == != ґવ။อཹ
SE-0124 Int.init(ObjectIdentifier) ৽⃧ bitPattern ඪត • ObjectIdentifier ՄҎ༻ိද݅తهԱᱪҐஔɻ • ՄҎUInt
, Int. • ݱࡏతํ๏ᔒ༗labelɼະိ။Ꮣ Int(bitPattern: identifier)
Community • ༗ਓ༻ Swift ሜྃ Android Appɼ্ؐՍྃ https://medium.com/@ephemer/why-we-put-an- app-in-the-android-play-store-using- swift-96ac87c88dfc#.dwf14ykx8