21
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Swift(一人)Advent Calendar 2015

Day 5

Swiftがオープンソース化されたので標準ライブラリにメソッド追加してみる

Last updated at Posted at 2015-12-05

先日、ついにSwiftがオープンソース化されました。
早速Macに入れて遊んでみたのでその事を書いてみようと思います。

今回やった事

配列にuniq()というメソッドを追加してみました。
[1, 2, 3, 1]と言った配列を[1, 2, 3]にしてくれます。

追加手順

Swiftのインストール

インストールはこちらの記事を参考にさせて頂きました。

オープンソースになった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 

これでコマンドラインで動かす事ができました。

20151204234205.png

配列に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 

スクリーンショット 2015-12-05 14.27.52.png

21
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?