Más contenido relacionado
La actualidad más candente (20)
Similar a LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介 (20)
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介
- 2. 自己紹介
• 藤崎祥見(フジサキ ショウケン)
• KitchHike,
Inc.
代表取締役
Co-‐CEO
• 普段はRuby
on
Railsで開発しています。
• MongoDB
JP
副代表
gihyo.jpで「MongoDBでゆるふわDB体験」を連載
• TwiQer:
@syokenz,
Qiita:
syokenz
• www.facebook.com/fujisaki.shoken
• Swi2経験:
2泊3日の開発合宿で麻雀の捨て牌候補を表示す
るアプリ作成
- 5. Extensionsとは
• Swi2の標準クラスを拡張できる仕組み
• ObjecYve-‐Cでは拡張カテゴリと呼ばれていたもの
extension Array {!
func each(f: (Element) -> ()) {!
for e in self {!
f(e)!
}!
}!
}!
!
Extensions
サンプルコード:
Arrayにeachを実装する
> [1,2,3].each { println($0) }!
=> 1!
=> 2!
=> 3
- 6. ExSwi2
• hQps://github.com/pNre/ExSwi2
• JavaScript
(Lo-‐Dash,
Underscore)
&
Rubyにインスパイア
• Swi2クラス拡張タイプ
• ファーストコミット
2014/06/04(WWDCの次の日)
• 仕事早すぎぃ!
356
let array = [5, 1, 0, 10]!
array.each { item in println(item) }!
!
var items = Int[]()!
(0..2).each { items.append($0) }!
!
let dic = ["A": 1, "B": 2, "C": 3]!
dic.each { key, value in println(key, value) }!
dic.has(“A”)!
!
let dic = [ "A": 1, "B": 2, "C": 3 ]!
let mapped = dic.map(mapFunction: { return ($0 + "!",
$1 + 1) })!
println(mapped)
ExSwi2
サンプルコード
- 7. Pythonic.Swi2
• hQps://github.com/pracYcalswi2/Pythonic.swi2
• Python
• Swi2クラス拡張タイプ
• タブとは何だったのか?
227
if re.search("^foo", "foobar") {!
println(["foo", "bar", "zonk"].index("foo")) // 0!
println(["foo", "bar", "zonk"].count("bar")) // 1!
println(["foo", "bar", "zonk"].count("zoo")) // 0!
}!
!
if any(["foo", "bar", "zonk"]) {!
println(chr(ord("a"))) // a!
}!
!
var greeting = " hello pythonista "!
if greeting.strip().startswith("hello") {!
println(greeting.strip().title()) // Hello Pythonista!
}
Pyhonic.Swi2
サンプルコード
- 8. • hQps://github.com/ankurp/Dollar.swi2
• Lo-‐Dash
or
Underscoreにインスパイア
• 独自クラス(なので厳密にはExtensionsでは無い)
• 同じプロジェクト内にCentというSwi2拡張タイプもある
• みんなの$が大好き
• hQps://github.com/lotz84/__.swi2
• Underscore.jsのクローン
• 独自クラス(なので厳密にはExtensionsでは無い)
• _(アンダースコア)は2つ
__.swi2
55
1,022
Dollar.swi2
- 9. $.at(["ant", "bat", "cat", "dog", "egg"], indexes: 0, 2, 4)!
=> ["ant", "cat", "egg”]!
!
$.contains([1, 2, 3, 1, 2, 3], value: 2) !
=> True!
$.range(0, endVal: 20, incrementBy: 5) !
=> [0, 5, 10, 15]!
!
let fun = $.bind({ (names: String...) -> String in!
let people = $.join(names, separator: " from ")!
return "Hello (people)"!
}, "Ankur", "Swift")!
$.times(2, function: fun) as String[] !
=> ["Hello Ankur from Swift", "Hello Ankur from Swift"]!
Dollar.Swi2
サンプルコード
- 10. RubySwi2
• hQps://github.com/Appletone/RubySwi2
• Ruby
• ファーストコミット
2014/07/16
メソッド少なすぎぃ!
• とりあえずStarした
1
5.times {!
println("Hey! You look really like Ruby")!
}!
!
5.upto(10) {!
println($0)!
}!
!
"HELLO".capitalized() !
=> Hello
RubySwi2
サンプルコード
- 11. Quick
• hQps://github.com/Quick/Quick
• Specライクなテストフレームワーク
• 実際に使った。幸せになれた。ドキュメントも充実している。
705
import Quick!
import Nimble!
!
class DolphinSpec: QuickSpec {!
override func spec() {!
it("is friendly") {!
expect(Dolphin().isFriendly).to.beTrue()!
}!
!
it("is smart") {!
expect(Dolphin().isSmart).to.beTrue()!
}!
}!
}
Quick
サンプルコード
- 12. まとめとTIPS
• プロジェクトにファイルを置くだけ手軽に導入できる
• Ruby使っている人にはQuickおすすめ
o Spec!
Spec!
• プロジェクトで導入するには、バージョンを固定するのが吉
o 仕様変更もたびたびあるので下手にUpdateすると動かなくなる
• 必要な部分だけつまんで導入するのもあり
o リポジトリのソースを参考に自分で書くのもあり
• 他のExtensionsとのコンフリクトに注意!
o Arrayクラスはだいたい拡張されている