What's new in Swift3
@TachibanaKaoru 2015/12/16
@TachibanaKaoru, 2015 1
自己紹介渋谷のVOYAGE GROUPでiOSエンジニアをしています。Twitter: @TachibanaKaoruBlog : http://www.toyship.org/
@TachibanaKaoru, 2015 2
VOYAGE GROUP
4 appetiというグルメアプリや、朝時間.jpという朝時間活用アプリなどをだしてます。
@TachibanaKaoru, 2015 3
try! Swift4 2016/3/2~3/4 at Shibuya
4 http://tryswiftconf.com/
4 VOYAGE GROUP はtry Swiftのスポンサーです。
@TachibanaKaoru, 2015 4
Swift is Open Source
@TachibanaKaoru, 2015 5
Swift is Open Source
@TachibanaKaoru, 2015 6
@TachibanaKaoru, 2015 7
Swift EvolutionSwiftのソースコードがオープンソースになっただけではなく、今後のSwiftの新規機能の議論もオープンされ、自由に参加できるようにもなりました。
@TachibanaKaoru, 2015 8
Swift Evolution
@TachibanaKaoru, 2015 9
@TachibanaKaoru, 2015 10
前回のSwiftのメジャーバージョンアップをふりかえってみると……
@TachibanaKaoru, 2015 11
WWDC 2015でSwift 2.0とiOS9が発表
@TachibanaKaoru, 2015 12
早くiOS9の機能を使いたい!
@TachibanaKaoru, 2015 13
iOS9の新機能を使うためには、最新のXcodeを使う必要があり、Swiftが強制的に1.2 -> 2.0にバージョンアップされる。
@TachibanaKaoru, 2015 14
Swift 1.2とSwift 2.0にはコード互換性がない!
@TachibanaKaoru, 2015 15
Swift 1.2 -> 2.0のマイグレーションツールが(一応)あったけど、まともに動かず、結局手動でソースコード修正
@TachibanaKaoru, 2015 16
\(^o^)/
@TachibanaKaoru, 2015 17
次回はそうならないように、Swift Evolutionの内容から、今後のSwiftのロードマップを予習していきましょう。
@TachibanaKaoru, 2015 18
Swift 2.2
@TachibanaKaoru, 2015 19
Swift 2.2まず、2016年春に、Swift 2.2のリリースが予定されています4 バグ修正、実装の品質向上、(warning messageなど)、コンパイル時間改善、パフォーマンス改善
4 コード互換性あり。4 3.0のリリースを見据えて、将来のコード変更に対する
warningを表示するようになる@TachibanaKaoru, 2015 20
Swift 3.0
@TachibanaKaoru, 2015 21
Swift 3.02016年秋に、Swift 3.0のリリースが予定されています。言語と標準ライブラリのバイナリレベルでのインターフェースを安定させることが目的。2系バージョンからのコードレベルの互換性はありません。
@TachibanaKaoru, 2015 22
Swift 3.0
4 Stable ABI(binary interface)
4 Resilience,Portability
4 Type system cleanup and documentation
4 Complete generics
4 Focus and refine the language
4 API design guidelines@TachibanaKaoru, 2015 23
Swift 3.0で対応しないこと4 2系Swiftとのソースレベルの互換性4 並列処理の言語サポート4 C++との互換性、マクロ4 標準ライブラリの拡張
@TachibanaKaoru, 2015 24
Proposals
これからSwiftに導入される機能はProposal単位で検討されています。
@TachibanaKaoru, 2015 25
Proposals
@TachibanaKaoru, 2015 26
@TachibanaKaoru, 2015 27
Proposalとは。今後のSwiftに追加したい or 削除したい機能の提案です。どのProposalを採用するかどうかの議論は、swift-revolution-mlで行われており、誰でも参加することができます。(もちろんProposalの提案も!)
@TachibanaKaoru, 2015 28
Current Proposals (1/2)
0001-keywords-as-argument-labels0002-remove-currying0003-remove-var-parameters-patterns0004-remove-pre-post-inc-decrement0005-objective-c-name-translation0006-apply-api-guidelines-to-the-standard-lib0007-remove-c-style-for-loops
@TachibanaKaoru, 2015 29
Current Proposals (2/2)
0008-lazy-flatmap-for-optionals0009-require-self-for-accessing-instance-members0010-add-staticstring-unicodescalarview0011-replace-typealias-associated0012-add-noescape-to-public-library-api0013-remove-partial-application-super0014-constrained-AnySequence
@TachibanaKaoru, 2015 30
What is 'proposals
現在14件中、Swift2.2での採用が1件、Swift3.0での採用が5件。それ以外は検討中です。
@TachibanaKaoru, 2015 31
[0001] Allow keywords as argument labels
4 Status: Swift2.2で採用4 Author: Doug Gregor
inやrepeatやdeferなどのキーワードとして使われていた単語を変数のラベル名に利用することができるようになる。(inout,var,let以外のすべての単語が使えるようになる)
@TachibanaKaoru, 2015 32
let numArray = [1,2,3]
// OK on Swift 2.1/2.2func indexOf1(a: Int, within: [Int]){ }indexOf1(2, within: numArray)
// OK on Swift 2.1/2.2func indexOf3(a: Int, `in`: [Int]){ }indexOf3(2, `in`: numArray)
// Error on Swift 2.1,OK on Swift 2.2func indexOf2(a: Int, in: [Int]){ }
@TachibanaKaoru, 2015 33
[0002] Removing currying func declaration syntax
Status: Swift3.0で採用Author(s): Joe Groff
カリー化の簡易記法がなくなる。(カリー化ができなくなるということではありません。)
@TachibanaKaoru, 2015 34
カリー化とはfunc addTwoInts(a a: Int, b: Int) -> Int { return a + b}addTwoInts(a: 2, b: 3)
func addTwoIntsCurried(a a: Int) -> ( Int -> Int) {
func addTheOtherInt(b: Int) -> Int { return a + b }
return addTheOtherInt}let a1 = addTwoIntsCurried(a: 2)a1(3)
@TachibanaKaoru, 2015 35
// OK in Swift2: func curried(x: Int)(y: String) -> Float { return Float(x) + Float(y)! }
// OK in Swift2 and Swift3: func curried(x: Int) -> (String) -> Float { return {(y: String) -> Float in return Float(x) + Float(y)! } }
@TachibanaKaoru, 2015 36
[0003] Removing var from Function Parameters and Pattern Matching
Status: Swift3.0で採用Author(s): David Farler
if varなどが使えなくなる。let num : Int? = getOptionalInt()if var num = num {// if let だとerror
num = 12}
@TachibanaKaoru, 2015 37
[0004] Remove the ++ and -- operators
Status: Swift3.0で採用Author: Chris Lattner
++と--をなくしましょう!(Proposal7とも関連)
@TachibanaKaoru, 2015 38
Finally, these fail the metric of "if we didn't already have these, would we add them to Swift 3?"
@TachibanaKaoru, 2015 39
[0005] Better Translation of Objective-C APIs Into Swift
Status: Swift3.0で採用Author(s): Doug Gregor, Dave Abrahams
Objective-CのAPIをSwiftにインポートする時のトランスレーション処理の改善。Stripping the "NS" Prefix なども含まれている。
@TachibanaKaoru, 2015 40
[0006] Apply API Guidelines to the Standard Library
Status: レビュー待ちAuthor(s): Dave Abrahams, Dmitri Gribenko, Maxim Moiseev
Swift3.0の一部としてSwift API Design Guidelinesが公開されるので、標準ライブラリをそれに沿った実装にする。
@TachibanaKaoru, 2015 41
[0007] Remove C-style for-loops with conditions and incrementers
Status: Swift3.0で採用Author(s): Erica Sadun
for-loopやめてfor-inを使いましょう。var array = [10,20,30,40,50]for(var i=0 ; i < array.count ;i++){ println("array[i] \(array[i])")}
@TachibanaKaoru, 2015 42
4 これ以降のProposalはレビュー待ち...4 そして、これ以外のproposalも続々出されています。4 swift-revolution-mlを読んで次世代Swiftの準備をしよう!
@TachibanaKaoru, 2015 43