Linux プラットフォーム上で Swift 言語開発の学習環境を構築する

高洛峰
リリース: 2016-11-22 17:46:51
オリジナル
1343 人が閲覧しました

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相关的函数,程序照样可以运行,不管是脚本还是编译成二进制可执行文件,这个我以后再细说了。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!