狠狠撸

狠狠撸Share a Scribd company logo
What's new in
Swift3
@TachibanaKaoru
2015/12/16
@TachibanaKaoru, 2015 1
自己紹介
渋谷のVOYAGE GROUPでiOSエンジ
ニアをしています。
Twitter: @TachibanaKaoru
Blog : http://www.toyship.org/
@TachibanaKaoru, 2015 2
VOYAGE GROUP
4 appetiというグルメアプリや、朝
時間.jpという朝時間活用アプリな
どをだしてます。
@TachibanaKaoru, 2015 3
try! Swift
4 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 Evolution
Swiftのソースコードがオープンソースになっただけではな
く、今後の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.0
2016年秋に、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-labels
0002-remove-currying
0003-remove-var-parameters-patterns
0004-remove-pre-post-inc-decrement
0005-objective-c-name-translation
0006-apply-api-guidelines-to-the-standard-lib
0007-remove-c-style-for-loops
@TachibanaKaoru, 2015 29
Current Proposals (2/2)
0008-lazy-flatmap-for-optionals
0009-require-self-for-accessing-instance-members
0010-add-staticstring-unicodescalarview
0011-replace-typealias-associated
0012-add-noescape-to-public-library-api
0013-remove-partial-application-super
0014-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.2
func indexOf1(a: Int, within: [Int]){ }
indexOf1(2, within: numArray)
// OK on Swift 2.1/2.2
func indexOf3(a: Int, `in`: [Int]){ }
indexOf3(2, `in`: numArray)
// Error on Swift 2.1,OK on Swift 2.2
func 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

More Related Content

What's new Swift3