Your SlideShare is downloading. ×
0
Swi$%1.2からSwi$%2への移行
@ikesyo
第62回#Cocoa勉強会関西,#2015,07,11#Sat
#cocoa_kansai
@ikesyo
いけしょー/池田翔
京都でフリーランスのiOSエンジニア
(時々Android)しています
現在はフリュー㈱のモバイル開発の
チームにジョイン中。
Swi$/Reac*veCocoaで書いています。
Reac%veCocoa/Carthageの
コミッター(Collaborator)やってます2✨
今日はSwi$%1.2からSwi$%2への移行を
どうやって楽にするか、準備するかを考えます。
概要
• !"Convert(to(Latest(Swi/(Syntax
• ""事前に差分を吸収する
• #"新機能/新構文を利用する
1.#Convert#to#Latest#Swi1#Syntax
変更される点の例
• count(String)"=>"String.characters.count
• グローバル関数"=>"Protocol"extensionsのメソッド...
9月以降に申請予定のアプリなら
Swi%&2でいくっきゃない&!
そうじゃなければ
2ヶ月以上も"swift2"ブランチを
並行運用するのは非常につらい
!"""#
9月頃まとめてやってもいいかもしれないけれど
diffが大きくなってレビューするのが面倒。
ということで事前に差分を吸収する
Xcode&7のGM版を待たずに、互換性を持たせられるところは予め
対応しておくことで後々の差分を減らす。
2.#事前に差分を吸収する
• count(String)"=>"String.characters.count"//"
String.CharacterView"が返る
• =>"count/charactersプロパティを追加する。
// ...
2.#事前に差分を吸収する
• Array<T>"=>"Array<Element>"//"from"beta"3
• =>"ArrayLiteralConvertible.Element"を使う。
// Swift 1.2
extension...
2.#事前に差分を吸収する
• グローバル関数の削減、Protocol(extensionsへの移行
• =>(Array/Dictionary/Set/LazySequence/Optionalなどのメソッドを使う。
• SequenceTy...
2.#事前に差分を吸収する
• Printable/DebugPrintable#=>#CustomStringConvertible/
CustomDebugStringConvertible
• =>#typealias#を使う。
// S...
2.#事前に差分を吸収する
• 関数/メソッドの引数ラベルの規則の統一
• Swi&'1.2:'関数は第2引数以降もデフォルトで引数ラベルなしで呼べる。ラベルありにするには'
#'を付ける。外部引数名と内部引数名を分けるとラベルが必要になる。
...
2.#事前に差分を吸収する
• 関数/メソッドの引数ラベルの規則の統一
// before
func globalFooBarFunc(a: String, b: Int) { ... }
globalFooBarFunc("FooBar", ...
2.#事前に差分を吸収する
• toString()"=>"Stringのイニシャライザへの置き換え
• Int/UIntはSwi-"1.2でもイニシャライザが存在するのでそれを使う。
• Swi-"2:"String.toInt() -> I...
2.#事前に差分を吸収する
こんな感じの互換レイヤーは!Swift2.swift!というファイルに
でもまとめておきましょう。
Xcode&7/Swi,&2に上げる時には削除してから&Convert to
Latest Swift Syntax...
3.#新機能/新構文を利用する
• Protocol(extensions
• if/while/forでのパターンマッチ
• do/try/catch
• guard
• defer
• Availability:(#available
3.#新機能/新構文を利用する
地道に
// TODO: Swift 2 - guard
if let value = optionalValue {
...
...
...
...
...
} else {
return nil
}
みたいな...
ありがとうございました!
Swift 1.2からSwift 2への移行 #cocoa_kansai
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

Swift 1.2からSwift 2への移行 #cocoa_kansai

195

Published on

第62回 Cocoa勉強会関西での発表スライドです。

Published in: Engineering
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
195
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript of "Swift 1.2からSwift 2への移行 #cocoa_kansai"

  1. 1. Swi$%1.2からSwi$%2への移行 @ikesyo 第62回#Cocoa勉強会関西,#2015,07,11#Sat #cocoa_kansai
  2. 2. @ikesyo いけしょー/池田翔 京都でフリーランスのiOSエンジニア (時々Android)しています 現在はフリュー㈱のモバイル開発の チームにジョイン中。 Swi$/Reac*veCocoaで書いています。
  3. 3. Reac%veCocoa/Carthageの コミッター(Collaborator)やってます2✨
  4. 4. 今日はSwi$%1.2からSwi$%2への移行を どうやって楽にするか、準備するかを考えます。
  5. 5. 概要 • !"Convert(to(Latest(Swi/(Syntax • ""事前に差分を吸収する • #"新機能/新構文を利用する
  6. 6. 1.#Convert#to#Latest#Swi1#Syntax 変更される点の例 • count(String)"=>"String.characters.count • グローバル関数"=>"Protocol"extensionsのメソッドへの置き換え • プロトコル名の変更: Printable"=>"CustomStringConvertible, DebugPrintable"=>"CustonDebugStringConvertible • 関数の引数ラベルの修正(メソッドとのルールの統一) • toString()"=>"Stringのイニシャライザへの置き換え • 不要なvarからletへの修正 • do"=>"repeat • NSErrorPointerを引数に取るメソッド"=>"throwsするように変更
  7. 7. 9月以降に申請予定のアプリなら Swi%&2でいくっきゃない&!
  8. 8. そうじゃなければ 2ヶ月以上も"swift2"ブランチを 並行運用するのは非常につらい !"""#
  9. 9. 9月頃まとめてやってもいいかもしれないけれど diffが大きくなってレビューするのが面倒。
  10. 10. ということで事前に差分を吸収する Xcode&7のGM版を待たずに、互換性を持たせられるところは予め 対応しておくことで後々の差分を減らす。
  11. 11. 2.#事前に差分を吸収する • count(String)"=>"String.characters.count"//" String.CharacterView"が返る • =>"count/charactersプロパティを追加する。 // Swift 1.2 extension String { var count: Int { return Swift.count(self) } var characters: String { return self } } "foo_bar".characters.count // => 7
  12. 12. 2.#事前に差分を吸収する • Array<T>"=>"Array<Element>"//"from"beta"3 • =>"ArrayLiteralConvertible.Element"を使う。 // Swift 1.2 extension Array { // Swift 2で `SequenceType` に追加されたメソッド。 func flatMap<U>(@noescape transform: (Element) -> U?) -> [U] }
  13. 13. 2.#事前に差分を吸収する • グローバル関数の削減、Protocol(extensionsへの移行 • =>(Array/Dictionary/Set/LazySequence/Optionalなどのメソッドを使う。 • SequenceType(や(CollectionType(を引数に使っている箇所は諦める(Swi3(1.2ではエミ ュレートできない) • 大体ちゃんと変換してくれる(はず)。 // Swift 1.2 let array = [ 1, 2, 3, 4, 5 ] // bad ! let r = map(filter(array) { $0 % 2 == 0 }) { String($0) } // => [ "2", "4" ] // good " let r = array.filter { $0 % 2 == 0 }.map { String($0) } // => [ "2", "4" ]
  14. 14. 2.#事前に差分を吸収する • Printable/DebugPrintable#=>#CustomStringConvertible/ CustomDebugStringConvertible • =>#typealias#を使う。 // Swift 1.2 typealias CustomStringConvertible = Printable typealias CustomDebugStringConvertible = DebugPrintable struct FooBar: CustomStringConvertible { var description: String { ... } }
  15. 15. 2.#事前に差分を吸収する • 関数/メソッドの引数ラベルの規則の統一 • Swi&'1.2:'関数は第2引数以降もデフォルトで引数ラベルなしで呼べる。ラベルありにするには' #'を付ける。外部引数名と内部引数名を分けるとラベルが必要になる。 • Swi&'2:'関数も第2引数以降に引数ラベルが必要になった。メソッドと同じルール。ラベルなし にするには'_'を付ける。外部引数名と内部引数名を分けるとラベルが必要なのは変わらない。 • =>'外部引数名、内部引数名を分ける。 • =>'ユーティリティクラスなどのstaticメソッドにしてしまう。 • =>'諦めて自動変換に任せる。この場合、関数のシグネチャは変わらずに呼び出し側にラベル が付加される。
  16. 16. 2.#事前に差分を吸収する • 関数/メソッドの引数ラベルの規則の統一 // before func globalFooBarFunc(a: String, b: Int) { ... } globalFooBarFunc("FooBar", 100) // after 1 func globalFooBarFunc(a: String, b bValue: Int) { ... } globalFooBarFunc("FooBar", b: 100) // after 2 final class FooBarUtil() { private init() {} static func fooBarMethod(a: String, b: Int) { ... } } FooBarUtil.fooBarMethod("FooBar", b: 100)
  17. 17. 2.#事前に差分を吸収する • toString()"=>"Stringのイニシャライザへの置き換え • Int/UIntはSwi-"1.2でもイニシャライザが存在するのでそれを使う。 • Swi-"2:"String.toInt() -> Int?"もなくなって"Int.init?(_ text: String, radix: Int = default)" になっている。 // Swift 1.2 let int: Int = 100 let uint: UInt = 12345 // bad ! let intString = toString(int) let uintString = toString(uint) // good " let intString = String(int) let uintString = String(uint)
  18. 18. 2.#事前に差分を吸収する こんな感じの互換レイヤーは!Swift2.swift!というファイルに でもまとめておきましょう。 Xcode&7/Swi,&2に上げる時には削除してから&Convert to Latest Swift Syntax&すればOK。
  19. 19. 3.#新機能/新構文を利用する • Protocol(extensions • if/while/forでのパターンマッチ • do/try/catch • guard • defer • Availability:(#available
  20. 20. 3.#新機能/新構文を利用する 地道に // TODO: Swift 2 - guard if let value = optionalValue { ... ... ... ... ... } else { return nil } みたいなコメントを残していきましょう!!!
  21. 21. ありがとうございました!
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×