先日、ついにSwiftがオープンソース化されました。
早速Macに入れて遊んでみたのでその事を書いてみようと思います。
今回やった事
配列にuniq()というメソッドを追加してみました。
[1, 2, 3, 1]と言った配列を[1, 2, 3]にしてくれます。
追加手順
Swiftのインストール
インストールはこちらの記事を参考にさせて頂きました。
下コマンドでインストールできました。
元記事にはなかったのですが、cmakeが必要と言われたのでいれました。
git clone git@github.com:apple/swift.git swift
git clone git@github.com:apple/swift-clang.git clang
git clone git@github.com:apple/swift-llvm.git llvm
git clone git@github.com:martine/ninja.git
brew install cmake
swift/utils/build-script # 1時間くらいかかる
Swiftを動かしてみる
buildフォルダ以下にSwiftがあるのでそれを実行してみます。
build/Ninja-DebugAssert/swift-macosx-x86_64/bin/swift
これでコマンドラインで動かす事ができました。
配列にuniq()メソッドを追加する
swift/stdlib/public/core/Sequence.swiftファイルを開いて以下の処理をどこかに追加します。
SequenceTypeとは配列が実装しているプロトコルで、filter/map等の有名なメソッドはこのプロトコルにメソッドがあります。
extension SequenceType where Generator.Element : Equatable {
@warn_unused_result
public func uniq() -> [Generator.Element] {
return reduce(Array<Generator.Element>()) { (arr, element) -> [Generator.Element] in
if arr.contains({ $0 == element }) { return arr }
var newArr = arr
newArr.append(element)
return newArr
}
}
}
再度ビルドします。
差分だけビルドするので10分程で終わります。
swift/utils/build-script
Swiftを起動し直すとuniqメソッドが動くようになりました。
build/Ninja-DebugAssert/swift-macosx-x86_64/bin/swift