Swiftスタート
8674 ワード
原文はSwift公式サイトより
バージョンの表示
REPL
パラメータのないSwiftコマンドを実行する場合は、REPL(Read-eval-print-loopインタラクティブ解釈器)を使用して、swiftのインタラクティブ解釈器が入力したswiftコードを直接読み取り、計算、印刷することができます. XcodeのPlaygroundはまさにREPLに基づいて実行実装をリアルタイムで解釈している.
インタラクション解釈器では、
パッケージ命令
Swiftのパッケージマネージャは、パッケージを構築したり、ファイルを実行したり、異なるpackageを使用してコードを共有したりするための開発者の習慣に合ったシステムを提供しています.ローカルのswift開発パッケージのインストールが完了すると、パッケージ管理ツールを直接呼び出すことができます:
1.パッケージの作成
ステップ1:Helloという名前のフォルダを作成します.
ステップ2:各パッケージには、
2.パッケージの構築
次に、
テスト実行パッケージ:
3.実行可能ファイルの構築
構築ターゲットtargetに
次は栗を作ります.このバッグはHelloという実行可能なファイルを生成し、「Hello,world!」の出力を実行します.
ステップ1:ディレクトリを作成してアクセス
ステップ2:実行可能ファイルタイプとして指定されたパッケージの初期化
ステップ3:ヒント:このパッケージディレクトリには実行可能なファイルが1つしかないので、実行ファイルの名前を省略して、
次に、新しいソースファイルでメソッド
外部パラメータを受信するパッケージの構築
ステップ1:この
ステップ2:
ステップ3:モジュールの構築方法、依存の導入、システムに付属するライブラリへのインデックス付けなど、Swiftパッケージマネージャについて学習する必要がある場合は、Swift Package Managerを参照してください.
LLDBデバッガの使用
栗を挙げると、以下のコードは
インタラクティブコンソールが表示され、lldbコマンドを実行します. LLDBの詳細については、LLDB Tutorial.を参照してください.
パラメータnの値を表示するには、
#締めくくり
SwiftのREPL、システムの構築、デバッガについて説明しましたが、より深い学習が必要な場合は、参考にしてください. Swift構築システムとパッケージマネージャ を深く学ぶ Swiftコミュニティで活躍 AppleのSwift開発リソース
バージョンの表示
$ swift --version
Apple Swift version 2.2-dev (LLVM ..., Clang ..., Swift ...)
REPL
パラメータのないSwiftコマンドを実行する場合は、REPL(Read-eval-print-loopインタラクティブ解釈器)を使用して、swiftのインタラクティブ解釈器が入力したswiftコードを直接読み取り、計算、印刷することができます.
$ swift
Welcome to Apple Swift version 2.2. Type :help for assistance.
1>
インタラクション解釈器では、
Darwin
(DarwinはMacOSの最下位コア)のようなシステムモジュールを直接参照することもできる.1> import Darwin
2> arc4random_uniform(10)
$R0: UInt32 = 4
パッケージ命令
Swiftのパッケージマネージャは、パッケージを構築したり、ファイルを実行したり、異なるpackageを使用してコードを共有したりするための開発者の習慣に合ったシステムを提供しています.ローカルのswift開発パッケージのインストールが完了すると、パッケージ管理ツールを直接呼び出すことができます:
swift package, swift run, swift build and swift test
:$ swift package --help
OVERVIEW: Perform operations on Swift packages
...
1.パッケージの作成
ステップ1:Helloという名前のフォルダを作成します.
$ mkdir Hello
$ cd Hello
ステップ2:各パッケージには、
Package.swift
というmanifestファイルがルートディレクトリ、すなわちこのときのHelloフォルダに配置されます.最低構成のパッケージを生成するようにコマンドすることもできます.swift package init
initコマンドは、デフォルトで次のパッケージディレクトリ構造を生成します.├── Package.swift
├── README.md
├── Sources
│ └── Hello
│ └── Hello.swift
└── Tests
├── HelloTests
│ └── HelloTests.swift
└── LinuxMain.swift
2.パッケージの構築
次に、
swift build
コマンドを使用して、構成ファイルmanifestに導入された依存ファイルをダウンロード、分解、コンパイルするパッケージを構築できます.swift build
Compile Swift Module 'Hello' (1 sources)
テスト実行パッケージ:
swift test
Compile Swift Module 'HelloTests' (1 sources)
Linking ./.build/x86_64-apple-macosx10.10/debug/HelloPackageTests.xctest/Contents/MacOS/HelloPackageTests
Test Suite 'All tests' started at 2016-08-29 08:00:31.453
Test Suite 'HelloPackageTests.xctest' started at 2016-08-29 08:00:31.454
Test Suite 'HelloTests' started at 2016-08-29 08:00:31.454
Test Case '-[HelloTests.HelloTests testExample]' started.
Test Case '-[HelloTests.HelloTests testExample]' passed (0.001 seconds).
Test Suite 'HelloTests' passed at 2016-08-29 08:00:31.455.
Executed 1 test, with 0 failures (0 unexpected) in 0.001 (0.001) seconds
Test Suite 'HelloPackageTests.xctest' passed at 2016-08-29 08:00:31.455.
Executed 1 test, with 0 failures (0 unexpected) in 0.001 (0.001) seconds
Test Suite 'All tests' passed at 2016-08-29 08:00:31.455.
Executed 1 test, with 0 failures (0 unexpected) in 0.001 (0.002) seconds
3.実行可能ファイルの構築
構築ターゲットtargetに
main.swift
が含まれている場合、このtargetは実行可能ファイルとして扱われ、パケットマネージャはこのmainファイルをバイナリ実行可能ファイルにコンパイルします.次は栗を作ります.このバッグはHelloという実行可能なファイルを生成し、「Hello,world!」の出力を実行します.
ステップ1:ディレクトリを作成してアクセス
$ mkdir Hello
$ cd Hello
ステップ2:実行可能ファイルタイプとして指定されたパッケージの初期化
swift package init --type executable
ステップ3:
swift run
命令を使用して、上記の初期化後の実行可能ファイルを構築し、実行します.swift run Hello
swift run
を直接使用することができます.swift build
コマンドでこのパッケージをコンパイルしてから、buildディレクトリの下でバイナリファイルを実行します.$ swift build
Compile Swift Module 'Hello' (1 sources)
Linking ./.build/x86_64-apple-macosx10.10/debug/Hello
>$ .build/x86_64-apple-macosx10.10/debug/Hello
Hello, world!
次に、新しいソースファイルでメソッド
sayHello(name:)
を定義し、実行可能ファイルに定義したこのメソッドを実行させます.外部パラメータを受信するパッケージの構築
ステップ1:
Sources/Hello
ディレクトリに新しいファイルGreeter.swift
を作成し、次のコードを入力します.func sayHello(name: String) {
print("Hello, \(name)!")
}
sayHello(name:)
メソッドは、パラメータとして文字列を受信し、「Hello」をつなぎ合わせて印刷します.ステップ2:
main.swift
ファイルを開き、中のコードを置き換えます.if CommandLine.arguments.count != 2 {
print("Usage: hello NAME")
} else {
let name = CommandLine.arguments[1]
sayHello(name: name)
}
main.swift
は、これまでハードコーディングされていた方法よりも、コマンドラインからパラメータを読み出し、sayHello(name:)
の方法で処理して出力する.ステップ3:
swift run
を再実行し、新しいバージョンのHello実行ファイルを生成します.$ swift run Hello `whoami`
LLDBデバッガの使用
LLDB
デバッガを使用してswiftプログラムを一歩一歩実行し、ブレークポイントを設定し、プログラムの状態をチェックし、変更することができます.栗を挙げると、以下のコードは
factorial(n:)
メソッドを定義し、呼び出した後に実行結果を印刷します.func factorial(n: Int) -> Int {
if n <= 1 { return n }
return n * factorial(n: n - 1)
}
let number = 4
print("\(number)! is equal to \(factorial(n: number))")
Factorial.swift
ファイルを作成し、上のコードcopyをファイルにコピーし、swiftc
コマンドを実行して、このファイルのファイル名をパラメータとして、-g
オプションとともにデバッグ情報を生成します.実行すると、現在のディレクトリにFactorialという実行可能ファイルが生成されます.$ swiftc -g Factorial.swift
$ ls
Factorial.dSYM
Factorial.swift
Factorial(Unix )
swiftc
コマンド(javacやgccのようなコンパイルツール)を使用してswiftファイルをコンパイルすると、コンパイル情報を出力できます.その後、run
命令を適用して直接プログラムを実行するのではなく、LLDBに変更して実行します.LLDBデバッガを使用するには、プログラムをパラメータとしてlldb命令の後ろに入力する必要があります.$ lldb Factorial
(lldb) target create "Factorial"
Current executable set to 'Factorial' (x86_64).
(lldb) ... ...
インタラクティブコンソールが表示され、lldbコマンドを実行します.
b
命令(breakpoint set)を使用して、factorial(n:)
メソッドの2行目にブレークポイントを設定し、この行コードが実行されるたびにプログラム間欠が取得される.(lldb) b 2
Breakpoint 1: where = Factorial`Factorial.factorial (Swift.Int) -> Swift.Int + 12 at Factorial.swift:2, address = 0x0000000100000e7c
r
命令(run)を使用してプログラムを実行し、rを入力して車に戻った後、プログラムが実行され、factorial(n:)
メソッドの呼び出しスタックを停止します.(lldb) r
Process 40246 resuming
Process 40246 stopped
* thread #1: tid = 0x14dfdf, 0x0000000100000e7c Factorial`Factorial.factorial (n=4) -> Swift.Int + 12 at Factorial.swift:2, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
frame #0: 0x0000000100000e7c Factorial`Factorial.factorial (n=4) -> Swift.Int + 12 at Factorial.swift:2
1 func factorial(n: Int) -> Int {
-> 2 if n <= 1 { return n }
3 return n * factorial(n: n - 1)
4 }
5
6 let number = 4
7 print("\(number)! is equal to \(factorial(n: number))")
p
命令(print)を使用して、パラメータnの値を表示します.(lldb) p n
(Int) $R0 = 4
p
命令もswift式を計算できる: (lldb) p n * n
(Int) $R1 = 16
bt
命令(backtrace)を使用して、factorial(n:)
へのフレームワークを表示します.(lldb) bt
* thread #1: tid = 0x14e393, 0x0000000100000e7c Factorial`Factorial.factorial (n=4) -> Swift.Int + 12 at Factorial.swift:2, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
* frame #0: 0x0000000100000e7c Factorial`Factorial.factorial (n=4) -> Swift.Int + 12 at Factorial.swift:2
frame #1: 0x0000000100000daf Factorial`main + 287 at Factorial.swift:7
frame #2: 0x00007fff890be5ad libdyld.dylib`start + 1
frame #3: 0x00007fff890be5ad libdyld.dylib`start + 1
c
命令(continue)を使用して、次のブレークポイントに遭遇するまでプログラムを続行します.(lldb) c
Process 40246 resuming
Process 40246 stopped
* thread #1: tid = 0x14e393, 0x0000000100000e7c Factorial`Factorial.factorial (n=3) -> Swift.Int + 12 at Factorial.swift:2, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
frame #0: 0x0000000100000e7c Factorial`Factorial.factorial (n=3) -> Swift.Int + 12 at Factorial.swift:2
1 func factorial(n: Int) -> Int {
-> 2 if n <= 1 { return n }
3 return n * factorial(n: n - 1)
4 }
5
6 let number = 4
7 print("\(number)! is equal to \(factorial(n: number))")
パラメータnの値を表示するには、
p
命令を再度使用します.(lldb) p n
(Int) $R2 = 3
br di
命令(breakpoint disable)を使用してすべてのブレークポイントを閉じ、c
命令でプログラムを続行します.(lldb) br di
All breakpoints disabled. (1 breakpoints)
(lldb) c
Process 40246 resuming
4! is equal to 24
Process 40246 exited with status = 0 (0x00000000)
#締めくくり
SwiftのREPL、システムの構築、デバッガについて説明しましたが、より深い学習が必要な場合は、参考にしてください.