1. はじめに
私はここ 2 日間忙しくて、何も記録する時間がありませんでした。12 月 4 日水曜日の午前 1 時ごろ、Apple が Swift を正式にオープンソース化したというニュースを目にしました。非常に迅速に。私も興奮して、Swift オープンソースに関する最新ニュースを読みました。周知のとおり、Apple プラットフォーム用の Swift 言語はリリースされて 1 年半が経過し、成長を続け、いくつかのバージョンを経てきました。多くの人々が楽しみにしている Swift のオープンソースは、この新しい言語が Apple プラットフォーム以外のプラットフォームでも使用できることです。たとえば、将来的には Swift を使用したり、バックグラウンドで開発できるようになることを期待する人もいます。しかし、オープンソースがリリースされると、そのようなビジョンに不満を抱く人もいます。多かれ少なかれコミュニティのメンバーはこの側面に熱心に取り組みます。 Apple は、Swift の新しい Web サイトである swift.org を正式に開設し、また、Ubuntu Linux プラットフォーム用にコンパイル済みの Swift ツール チェーン パッケージ ファイルと Linux でのコンパイル ガイドをリリースしました。今日このブログを書く目的は、初心者や短大生に Swift 言語の使用を紹介し、促進することです。
2.Swift+Ubuntu 環境の構成
まず、Ubuntu Linux オペレーティング システムがインストールされていると仮定します。このシステムのインストールは、インターネット上に多数のステップバイステップのチュートリアルがあります。仮想マシンの場合は、VirtualBox を使用することをお勧めします。 Swift は、Ubuntu 14.04 と 15.10 の 2 つのバージョンをサポートしています。私は 15.10 バージョンのパッケージを選択しました。
ステップ 1: Swift 2.2 ツールチェーン圧縮パッケージをダウンロードし、ターミナルを開き、コマンドを入力して新しいディレクトリを作成してダウンロードします
diveinedu@diveinedu-VirtualBox:~$ mkdir swift && cd swift; diveinedu@diveinedu-VirtualBox:~/swift$ wget https://swift.org/builds/ubuntu1510/swift-2.2-SNAPSHOT-2015-12-01-b/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10.tar.gz
ステップ 2: tar コマンドを使用して、Swift 2.2 ツールチェーン圧縮パッケージを現在のディレクトリに解凍します。そして、環境変数を設定します
まずそれを解凍し、ディレクトリ内に usr/bin や usr/lib などのサブディレクトリがあります:
diveinedu@diveinedu-VirtualBox:~/swift$ tar xvf swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10.tar.gz diveinedu@diveinedu-VirtualBox:~/swift$ cd swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10/
次に、ユーザーレベルの環境変数を設定し、$HOME/ を編集します。 bashrc 設定ファイル
diveinedu@diveinedu-VirtualBox:~/swift/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10$ gedit $HOME/.bashrc
上記のコマンドは、グラフィカル インターフェイス テキスト エディター GEdit を使用してこの設定ファイルを編集します。ファイルの最後に次の設定行を入力し、保存してエディターを終了します
export SWIFT_HOME=$HOME/swift/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10 export PATH=$SWIFT_HOME/usr/bin:$PATH export LD_LIBRARY_PATH=$SWIFT_HOME/usr/lib:$LD_LIBRARY_PATH export LIBRARY_PATH=$SWIFT_HOME/usr/lib:$LIBRARY_PATH
。その後、環境変数が次のようになります。設定はOKです。現時点では、シェルターミナルを閉じてターミナルを再度開くだけで有効になります。
3. Swift+Ubuntu の初体験
iOS 開発を行ったことがある人なら誰でも、2014 年 6 月に Swift が初めて誕生したとき、Xcode で実行結果を確認できることを知っています。 Ubuntu Linux では同様のものはありませんが、そのような強力な IDE サポートはありません。Pyhton スクリプト パーサーと同様の Swift パーサーを実行し、Swift コードを同期的に入力して「解析」し、実行することができます。このコマンドは迅速であり、上記の環境変数を設定した後、以下に示すようにターミナルを再度開くことで直接使用できます。
diveinedu@diveinedu-VirtualBox:~$ swift Welcome to Swift version 2.2-dev (LLVM 46be9ff861, Clang 4deb154edc, Swift 778f82939c). Type :help for assistance. 1> let hello = "hello"; hello: String = "hello" 2> let world = "diveinedu" world: String = "diveinedu" 3> let space = " " space: String = " " 4> print(hello+space+world); hello diveinedu 5>hello. Available completions: append(c: Character) -> Void append(x: UnicodeScalar) -> Void appendContentsOf(newElements: S) -> Void appendContentsOf(other: String) -> Void characters: String.CharacterView debugDescription: String endIndex: Index hashValue: Int insert(newElement: Character, atIndex: Index) -> Void insertContentsOf(newElements: S, at: Index) -> Void isEmpty: Bool lowercaseString: String nulTerminatedUTF8: ContiguousArray<CodeUnit> removeAll() -> Void removeAll(keepCapacity: Bool) -> Void removeAtIndex(i: Index) -> Character removeRange(subRange: Range<Index>) -> Void replaceRange(subRange: Range<Index>, with: C) -> Void replaceRange(subRange: Range<Index>, with: String) -> Void reserveCapacity(n: Int) -> Void startIndex: Index unicodeScalars: String.UnicodeScalarView uppercaseString: String utf16: String.UTF16View utf8: String.UTF8View withCString(f: UnsafePointer<Int8> throws -> ResultUnsafePointer<Int8> throws -> Result) -> Result withMutableCharacters(body: (inout String.CharacterView) -> R(inout String.CharacterView) -> R) -> R write(other: String) -> Void writeTo(&target: Target) -> Void 6> hello.isEmpty $R0: Bool = false
この分析および実行インターフェイスには、自動プロンプト完了機能もあります。上の 5 行目は、hello と入力してからさらに入力し、Tab キーを押すと、文字列に関するメソッドが一度にたくさん表示されます。母は、メソッドを覚えられないことを心配しなくなりました。ターミナルモードでの名前。
上記の単純なコード行にはクラスとオブジェクトは含まれていません。クラス定義とオブジェクトの作成を直接入力する方法と、Swift パーサーでの簡単な使用方法を見てみましょう。
diveinedu@diveinedu-VirtualBox:~$ swift Welcome to Swift version 2.2-dev (LLVM 46be9ff861, Clang 4deb154edc, Swift 778f82939c). Type :help for assistance. 1> struct Resolution { 2. var width = 0 3. var height = 0 4. } 5. class VideoMode { 6. var resolution = Resolution() 7. var interlaced = false 8. var frameRate = 0.0 9. var name: String? 10. func description() 11. { 12. print("name:\(name) frameRate:\(frameRate)") 13. } 14. } 15> let mode = VideoMode() mode: VideoMode = { resolution = { width = 0 height = 0 } interlaced = false frameRate = 0 name = nil } 16> mode.name = "1080p HD" 17> mode.frameRate = 30.0 18> mode.description() name:Optional("1080p HD") frameRate:30.0 19>
これらは、Swift パーサーで一時的に実行されるコードの一部です。新しい .swift 形式のファイルを作成して、それを実行可能なバイナリ ファイルにコンパイルする必要がある場合は、どうすればよいでしょうか。swiftc を使用することもできます。コンパイルするコマンド。 Swift コード ファイルを保存するための新しいディレクトリを作成し、test.swift:
diveinedu@diveinedu-VirtualBox:~$ mkdir -p $HOME/swift/swiftcode diveinedu@diveinedu-VirtualBox:~$ cd $HOME/swift/swiftcode diveinedu@diveinedu-VirtualBox:~/swift/swiftcode$ gedit test.swift
を編集します。gedit テキスト エディターを開いた後、クラスとオブジェクトの作成とメソッド呼び出し用の上記のコードを入力します。これらは以下にリストされています
struct Resolution { var width = 0 var height = 0 } class VideoMode { var resolution = Resolution() var interlaced = false var frameRate = 0.0 var name: String? func description() { print("name:\(name) frameRate:\(frameRate)") } } let mode = VideoMode() mode.name = "1080p HD" mode.frameRate = 30.0 mode.description()
保存 最後にエディタを閉じ、swiftc test.swift を実行してソース ファイルをコンパイルします。次のリンク エラーが表示されます。
diveinedu@diveinedu-VirtualBox:~/swift/swiftcode$ swiftc test.swift <unknown>:0: error: link command failed with exit code 127 (use -v to see invocation) diveinedu@diveinedu-VirtualBox:~/swift/swiftcode$
解決策は、コンパイル依存関係の clang libicu-dev をインストールし、次のコマンドを入力して Enter キーを押すことです。現在のユーザーのパスワードを尋ねられます)
diveinedu@diveinedu-VirtualBox:~/swift/swiftcode$ sudo apt-get install clang libicu-dev
インストール完了後、再度コンパイルコマンド swiftc test.swift を実行するとコンパイルが成功し、カレントディレクトリにテスト実行ファイルが出力されます。
diveinedu@diveinedu-VirtualBox:~/swift/swiftcode$ swiftc test.swift diveinedu@diveinedu-VirtualBox:~/swift/swiftcode$ ./test name:Optional("1080p HD") frameRate:30.0
而且执行ldd ./test查看此二进制文件依赖的动态库可知,它链接了libswiftCore,这是所有swift程序都会需要的。
diveinedu@diveinedu-VirtualBox:~/swift/swiftcode$ ldd ./test linux-vdso.so.1 => (0x00007ffcef3f5000) libswiftCore.so => /home/diveinedu/swift/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10/usr/lib/swift/linux/libswiftCore.so (0x00007f1cd2f75000) libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f1cd2bdd000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f1cd28d5000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f1cd26be000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1cd22f3000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f1cd20d5000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f1cd1ed1000) libicuuc.so.55 => /usr/lib/x86_64-linux-gnu/libicuuc.so.55 (0x00007f1cd1b3c000) libicui18n.so.55 => /usr/lib/x86_64-linux-gnu/libicui18n.so.55 (0x00007f1cd16d9000) libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007f1cd14c9000) /lib64/ld-linux-x86-64.so.2 (0x0000556e488b7000) libicudata.so.55 => /usr/lib/x86_64-linux-gnu/libicudata.so.55 (0x00007f1ccfa11000)
细心的读者会发现好像不见main函数或者main相关的函数,程序照样可以运行,不管是脚本还是编译成二进制可执行文件,这个我以后再细说了。