「Swift」の版間の差分
削除された内容 追加された内容
s/Category:コンピュータ言語/Category:プログラミング言語/) タグ: 2017年版ソースエディター |
敬体に統一。Cat.;s/暗黙の型変換(cast)/暗黙の型変換( ''implicit conversion'' )/2 タグ: 2017年版ソースエディター |
||
2 行
{{Pathnav|メインページ|工学|情報技術|プログラミング}}
[[w:Swift_(プログラミング言語)|Swift]]
== 目次 ==
11 行
== 環境準備 ==
公式サイトの、[https://www.swift.org/download/ Download Swift]からインストーラーを入手するのが基本です。
=== iPadOS ===
Appleから、「[[W:Swift Playgrounds|Swift Playgrounds]]」が学生を対象に公開されています。
Swift Playgroundsは開発環境であるとともに、Swiftの基本を習得するためのチュートリアルを含んでいます。
=== macOS ===
Swiftを開発したAppleのプラットフォームです。
macOS 10.9 以降をサポートしています。
Xcodeに統合されています。
複数のツールチェインがSwiftをサポートしているので、目的に応じて切り替えて使用します。
=== Windows ===
Windows10以降をサポートしています(Windows8.1以前はサポート対象外)。
===
GNU/Linuxのディストリビューションの場合、使用するパッケージマネージャによってパッケージ名と依存関係、インストールに使用するコマンドが異なります。
もし、使用しているディストリビューションにSwiftのパッケージがない場合は、Swift公式サイトにあるTARBALLをダウンロードしてインストールします(RPMでも提供されていますが experimental use only との位置づけです)。
=== Linuxの場合 ===▼
sudo dnf install swift-lang▼
==== Ubuntu ====
18.04 以降をサポートしています。
==== CentOS ====
7 以降をサポートしています。
==== Amazon Linux ====
2 以降をサポートしています。
公式サポートはないので、Fedora 独自のパッケージリポジトリーから非公式版をインストールします。
最新の利用可能なバージョンへインストール済みパッケージを同期する
sudo dnf distro-sync
実際のインストール
▲ sudo dnf install swift-lang
== 実行方法 ==
32 ⟶ 56行目:
</syntaxhighlight>
で十分。これをテキストエディタでコードを書き、たとえば <code>hello.swift</code> などのファイル名で保存します
=== コンパイルする場合 ===
実行方法は、まずコンパイルのために
swiftc ファイル名.swift
を実行します
すると、標準設定なら
MS-DOSやWindowsでは、PATHが通っていなくてもカレントフォルダのファイルを名前を打つだけで実行できますが、他のプラットフォームの場合は
./ファイル名
のようなに <code>./</code> を前置してカレントディレクトのファイルであることを明示して実行します。
=== インタプリタの場合 ===
コマンド
swift ファイル名.swift
で、インタプリタとしてコンパイル無しで実行でき
かつて「swift run」というコマンドだったが、現代では廃止され、上記のようなコマンドになってい
=== 対話モードの場合 ===
コマンド
swift
で対話モードにな
終了したい場合、Ctrl + D ボタンで終了します
== 定数と変数 ==
=== 基本 ===
定数は<code>let</code>キーワードで、変数は<code>var</code>キーワードによって宣言します
:<syntaxhighlight lang="swift">
let 定数名: 型 = 式
73 ⟶ 97行目:
print( a )
</syntaxhighlight>
のように記述します
なお、これを実行すると
79 ⟶ 103行目:
47
</syntaxhighlight>
と表示され
89 ⟶ 113行目:
下記のように、先に変数名だけ宣言しておいて、あとで値を代入することも可能で
:<syntaxhighlight lang="swift">
101 ⟶ 125行目:
=== 仕様 ===
型推論が可能な場合には型アノテーション(''type annotation''; <code>: 型名</code>の部分)を省略でき
:<syntaxhighlight lang="swift">
let a: Double = 3.141592
107 ⟶ 131行目:
</syntaxhighlight>
なお、いかなる数値型の変数についても
:<syntaxhighlight lang="swift">
let b: Int = 1
116 ⟶ 140行目:
== 基本データ型 ==
=== 数値 ===
符号付き整数の型には、<code>Int</code>、<code>Int8</code>、<code>Int16</code>、<code>Int32</code>、<code>Int64</code>があ
符号無し整数の型には、<code>UInt</code>、<code>UInt8</code>、<code>UInt16</code>、<code>UInt32</code>、<code>UInt64</code>があ
浮動小数点数の型には、IEEE 754 単精度<code>Float</code>と、倍精度の<code>Double</code>があ
先述の通り、上記の型に対して暗黙の型変換
「int」など小文字だとエラーにな
=== 文字列 ===
Swiftの文字列は'''<code>String</code>'''型、文字は'''<code>Character</code>'''型で
;コード例:<syntaxhighlight lang="swift">
137 ⟶ 161行目:
</syntaxhighlight>
二重引用符 ( " から次の " まで)の中に、変数に代入したい文字または文字列を書く。変数のセクションではいちいち説明しなかったかもしれ
文字や文字列を代入する場合、シングル引用符「<nowiki>'</nowiki>」だとエラーにな
文字列と別の文字列の連結は、<code>+</code>演算子で行え
;コード例:<syntaxhighlight lang="swift">
157 ⟶ 181行目:
</syntaxhighlight>
なお、「greet1 + " "」のように直接的に引用符で指定した文字列と変数を連結しようとしても、エラーにな
表示したい文字列中に変数値を埋め込む場合、下記の方法のいずれかを使えばいいです。<code>String()</code>でキャストする方法か、または<code>\()</code>を使う方法で
;コード例:<syntaxhighlight lang="swift">
182 ⟶ 206行目:
UTF-16表現ではサロゲートペアを要する拡張領域の文字も1文字として扱う。
下記のように、オブジェクトの文字数をカウントするcountプロパティが用意されているので、それでカウントするとコメント(// より行末までが実行時には無視され
:<syntaxhighlight lang="swift">
198 ⟶ 222行目:
</syntaxhighlight>
NSString の利用には Foundation のインポートが必要なので、上記コードではインポートしてい
=== 配列 ===
配列は、'''<code>Array<型></code>'''ないし'''<code>[型]</code>'''と宣言します
:<syntaxhighlight lang="swift">
var arrayOfChars: [Character] // 宣言のみ
232 ⟶ 256行目:
空の定義を宣言した場合は、下記のように、あとで例えば<code>.append</code>などで具体的な値とともに項を追加する必要があ
:<syntaxhighlight lang="swift">
336 ⟶ 360行目:
=== 辞書 ===
Swiftでは、連想配列は'''辞書(Dictionary)'''と呼ばれ
辞書は総称型であり、キーの型<code>KeyType</code>、値の型<code>ValueType</code>を持つ辞書は<code>Dictionary<KeyType,ValueType></code>または<code>[KeyType: ValueType]</code>と宣言します
:<syntaxhighlight lang="swift">
var name2num = [String:Int]()
349 ⟶ 373行目:
</syntaxhighlight>
<code>[:]</code>が空の辞書リテラルであるが、キーの型および値の型が指定されている必要がある点は配列と同様で
:<syntaxhighlight lang="swift">
var dict: [String: Int] = [:]
393 ⟶ 417行目:
</syntaxhighlight>
タプルの各要素には名前をつけることができ
:<syntaxhighlight lang="swift">
let okStatus = (code: 200, message: "OK")
402 ⟶ 426行目:
</syntaxhighlight>
代入式で定数や変数に分解することができ
:<syntaxhighlight lang="swift">
let (_, message) = okStatus
408 ⟶ 432行目:
=== Optional型 ===
Swiftでは安全性のため、ある型の定数や変数に'''<code>nil</code>'''を代入することは禁止されてい
変数に<code>nil</code>を代入可能にするには、'''<code>Optional</code>'''型でラップします
:<syntaxhighlight lang="swift">
var n: Int = nil // コンパイルエラー
433 ⟶ 457行目:
<code>Optional<Type></code>型の値から<code>Type</code>型の値を取り出すことを、'''アンラップする'''という。
<code>Optional</code>型の値を強制的にアンラップするには、値のうしろに"<code>!</code>"を付け
:<syntaxhighlight lang="swift">
let fruits = ["apple", "banana", "orange"]
446 ⟶ 470行目:
</syntaxhighlight>
if文とwhile文では'''Optional束縛(optional binding)'''を記述でき
:<syntaxhighlight lang="swift">
if let kiwiIndex = find(fruits, "kiwi") {
455 ⟶ 479行目:
</syntaxhighlight>
<code>Optional</code>型の変数のメソッドやプロパティを呼び出す際には、'''Optional Chaining'''を記述でき
:<syntaxhighlight lang="swift">
var possibleOrangeIndex = findString(data:fruits, key:"orange")
482 ⟶ 506行目:
| <code>*</code> || 乗算
|-
| <code>/</code> || 除算(整数型のゼロ除算はエラーとな
|-
| <code>%</code> || 剰余(整数型のゼロでの剰余演算はエラーとな
|-
| <code>&+</code> || 加算(オーバーフローを無視します
|-
| <code>&-</code> || 減算(オーバーフローを無視します
|-
| <code>&*</code> || 乗算(オーバーフローを無視します
|-
| <code>&/</code> || 除算(オーバーフローを無視し、ゼロ除算の結果は<code>0</code>とな
|-
| <code>&%</code> || 剰余(オーバーフローを無視し、ゼロでの剰余演算の結果は<code>0</code>とな
|}
723 ⟶ 747行目:
== その他 ==
識別子にはたいていのUnicode文字を用いることができ
:<syntaxhighlight lang="swift">
let リンゴの数 = 3
731 ⟶ 755行目:
文字列リテラルの中にある<code>\(...)</code>には、式の結果が展開される
:<syntaxhighlight lang="swift">
let リンゴ説明 = "私は\(リンゴの数)個のリンゴを持ってい
let 果物説明 = "私は\(リンゴの数 + みかんの数)個の果物を持ってい
</syntaxhighlight>
'''ヒアドキュメント'''には、ダブルクォーテーション3つを使用します
:<syntaxhighlight lang="swift">
let tanka = """
755 ⟶ 779行目:
</syntaxhighlight>
'''浮動小数点リテラル'''は、通常の十進数表記に加え16進数表記もサポートしてい
:<syntaxhighlight lang="swift">
let π = 3.1415926535897931
761 ⟶ 785行目:
</syntaxhighlight>
整数型と浮動小数点型のどちらでも、コードの見やすさのためにアンダースコア '''_''' を桁の区切りとして挿入でき
:<syntaxhighlight lang="swift">
let threeHundledMillion = 300_000_000
767 ⟶ 791行目:
</syntaxhighlight>
アンダースコアは、代入文で代入する値を無視したいときに、仮の代入先として使用でき
:<syntaxhighlight lang="swift">
var s:String? = "String"
789 ⟶ 813行目:
=== C言語との類似点 ===
* ほとんどのC言語の演算子はSwiftでも使用でき
** ただし、Swiftではオーバーフローを伴う数値演算のサポートのための演算子が追加されてい
* 中括弧は、文をグループ化するために使用され
* 等号1つ<code>=</code>は代入、2つ<code>==</code>は等価比較を意味します
** この他に、Swiftでは等号3つ<code>===</code>は同じオブジェクトを参照しているかどうかを確認するための演算子を意味します
* <code>while</code>、<code>if</code>、<code>for</code>等の制御文が類似してい
** ただし、Swiftでは拡張機能を有します
* 角括弧は、配列の宣言と配列の要素取得の両方で使用され
=== Objective-Cとの類似点 ===
* 基本的な数値型<code>Int</code>、<code>UInt</code>、<code>Float</code>、<code>Double</code>等のサポート。
* クラスメソッドは、インスタンスメソッドと同様に継承され
* <code>for</code>...<code>in</code>列挙構文のサポート。
=== Objective-Cとの相違点 ===
* 文はセミコロン(<code>;</code>)で終わる必要は
* ヘッダーファイルが存在し
* <code>/*</code>~<code>*/</code>によるコメントはネスト'''でき
* 型推論のサポート。
* ジェネリックプログラミングのサポート。
* 関数は第一級オブジェクトで
* 演算子はクラスに対して再定義(演算子のオーバーロード)でき、新しい演算子を定義でき
* 文字列はUnicodeを完全にサポートします
* 例外処理は存在し
* バグの原因となるC言語ファミリーの特徴がいくつか削除されてい
** デフォルトでは、ポインタは公開されてい
** 変数割り当ては値を返
** <code>switch</code>文内で<code>break</code>を行う必要は
** 変数と定数は常に初期化され、配列の境界は常にチェックされ
** 算術オーバーフローは実行時エラーとしてトラップされ
** ブロックを用いない1行の<code>if</code>文、<code>while</code>文はサポートされてい
** Off-by-oneエラーの原因となるC言語スタイルの<code>for (int i = 0; i < c; i++)</code>文は、Swift 3で削除されました。
** インクリメント演算子<code>++</code>、デクリメント演算子<code>--</code>は、Swift 3で削除されました。
== 脚
<references />
831 ⟶ 855行目:
* [https://swiftfiddle.com/ SwiftFiddle - Swift Online Playground]
[[Category:Swift|*]]
[[Category:プログラミング言語]]
{{NDC|007.64}}
|