削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
s/Category:コンピュータ言語/Category:プログラミング言語/)
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
敬体に統一。Cat.;s/暗黙の型変換(cast)/暗黙の型変換( ''implicit conversion'' )/2
タグ: 2017年版ソースエディター
2 行
{{Pathnav|メインページ|工学|情報技術|プログラミング}}
 
[[w:Swift_(プログラミング言語)|Swift]]は、[[w:アップル (企業)|Apple]]が作成により、iOS、iPadOS、macOS、tvOS、および watchOS のために開発したオープンソースのプログラミング言語である。なお、iPadアプリ 「Swift Playgrounds」では、子供向けに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以前はサポート対象外)。
Windows10以降しか対応していない。SwiftのWindows10への対応がニュースになったが[https://forest.watch.impress.co.jp/docs/news/1278413.html 『Appleのプログラミング言語「Swift」がWindows 10へ移植、電卓デモがお披露目される』樽井 秀人 2020年9月23日 13:08]、裏を返せば、Windows8以前のOSはサポート外である。
 
=== MacGNU/Linux場合ディストリビューション ===
GNU/Linuxのディストリビューションの場合、使用するパッケージマネージャによってパッケージ名と依存関係、インストールに使用するコマンドが異なります。
:※未作成
 
もし、使用しているディストリビューションにSwiftのパッケージがない場合は、Swift公式サイトにあるTARBALLをダウンロードしてインストールします(RPMでも提供されていますが experimental use only との位置づけです)。
=== Linuxの場合 ===
Fedoraの場合、コマンド
sudo dnf install swift-lang
でインストール完了。以上。
 
==== Ubuntu ====
Fedoraの場合、Swift公式サイトにあるRPMはダウンロードしなくて済む。
18.04 以降をサポートしています。
 
==== CentOS ====
7 以降をサポートしています。
 
==== Amazon Linux ====
2 以降をサポートしています。
 
==== LinuxFedoraの場合 ====
公式サポートはないので、Fedora 独自のパッケージリポジトリーから非公式版をインストールします。
 
最新の利用可能なバージョンへインストール済みパッケージを同期する
sudo dnf distro-sync
実際のインストール
sudo dnf install swift-lang
 
== 実行方法 ==
32 ⟶ 56行目:
</syntaxhighlight>
 
で十分。これをテキストエディタでコードを書き、たとえば <code>hello.swift</code> などのファイル名で保存しま。swiftで推奨される拡張子は「.swift」である
 
=== コンパイルする場合 ===
実行方法は、まずコンパイルのために
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>
のように記述しま。型 <code>Int</code> は冒頭が大文字でなければならないりません。小文字 int だとエラーになります
 
なお、これを実行すると
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>
 
なお、いかなる数値型の変数についても暗黙の'''暗黙の型変換'''(cast ''implicit conversion'' )が行われることはなく、型の違う数値同士の演算、右辺と左辺で型の異なる代入は全てコンパイルエラーとなります。一方、数値リテラルについては、整数型から浮動小数点型への暗黙の型変換が行われることがあります
:<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>Int</code>は、32ビット環境では<code>Int32</code>と同じサイズ、64ビット環境では<code>Int64</code>と同じ。
 
符号無し整数の型には、<code>UInt</code>、<code>UInt8</code>、<code>UInt16</code>、<code>UInt32</code>、<code>UInt64</code>があります。<code>UInt</code>は、32ビット環境では<code>UInt32</code>と同じサイズ、64ビット環境では<code>UInt64</code>と同じ。
 
浮動小数点数の型には、IEEE 754 単精度<code>Float</code>と、倍精度の<code>Double</code>があります
 
先述の通り、上記の型に対して暗黙の型変換(cast)( ''implicit conversion'' )が行われることは一切ないありません
 
「int」など小文字だとエラーになります。冒頭は大文字で<code>Int</code>のように書かなければならないりません
 
=== 文字列 ===
Swiftの文字列は'''<code>String</code>'''型、文字は'''<code>Character</code>'''型である
 
;コード例:<syntaxhighlight lang="swift">
137 ⟶ 161行目:
</syntaxhighlight>
 
二重引用符 ( " から次の " まで)の中に、変数に代入したい文字または文字列を書く。変数のセクションではいちいち説明しなかったかもしれないませんが、変数には数値だけでなく文字列や文字も代入できます
 
文字や文字列を代入する場合、シングル引用符「<nowiki>'</nowiki>」だとエラーになります。二重引用符を使うこと。
 
 
文字列と別の文字列の連結は、<code>+</code>演算子で行えます
 
;コード例:<syntaxhighlight lang="swift">
157 ⟶ 181行目:
</syntaxhighlight>
 
なお、「greet1 + " "」のように直接的に引用符で指定した文字列と変数を連結しようとしても、エラーになります。よって上記では、別途、変数「space」を用意してあります
 
 
表示したい文字列中に変数値を埋め込む場合、下記の方法のいずれかを使えばいいです。<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>と宣言しま。Array同様、より直感的な後者が推奨されています
:<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>'''型でラップしま。任意の型の<code>Optional</code>型は、ラップしたい型名の後ろに"'''<code>?</code>'''"を付けて表す。
:<syntaxhighlight lang="swift">
var n: Int = nil // コンパイルエラー
433 ⟶ 457行目:
<code>Optional<Type></code>型の値から<code>Type</code>型の値を取り出すことを、'''アンラップする'''という。
 
<code>Optional</code>型の値を強制的にアンラップするには、値のうしろに"<code>!</code>"を付けます。アンラップしようとした値がnilの場合は実行時エラーが発生しま
:<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 リンゴ説明 = "私は\(リンゴの数)個のリンゴを持っています。" // ”私は3個のリンゴを持っています。"
let 果物説明 = "私は\(リンゴの数 + みかんの数)個の果物を持っています。" //"私は8個の果物を持っています。"
</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では拡張機能を有しま。例えば、<code>while</code>、<code>if</code>文はパターンマッチングや条件付きOptionalアンラップをサポートしま
* 角括弧は、配列の宣言と配列の要素取得の両方で使用されます
 
=== Objective-Cとの類似点 ===
* 基本的な数値型<code>Int</code>、<code>UInt</code>、<code>Float</code>、<code>Double</code>等のサポート。
* クラスメソッドは、インスタンスメソッドと同様に継承されます。クラスメソッド内の<code>self</code>は、メソッドが呼び出されたクラスを意味しま
* <code>for</code>...<code>in</code>列挙構文のサポート。
 
=== Objective-Cとの相違点 ===
* 文はセミコロン(<code>;</code>)で終わる必要はないありません。しかし、1行に複数の文を記述する際に使用することができます
* ヘッダーファイルが存在しないません
* <code>/*</code>~<code>*/</code>によるコメントはネスト'''できます'''
* 型推論のサポート。
* ジェネリックプログラミングのサポート。
* 関数は第一級オブジェクトである
* 演算子はクラスに対して再定義(演算子のオーバーロード)でき、新しい演算子を定義できます
* 文字列はUnicodeを完全にサポートしま。ほとんどのUnicode文字は識別子や演算子でも使用できます
* 例外処理は存在しないません。Swift 2では例外処理とは互換性のない別のエラー処理モデルが導入されています
* バグの原因となるC言語ファミリーの特徴がいくつか削除されています
** デフォルトでは、ポインタは公開されていないません。プログラマが参照の管理をする必要はないありません
** 変数割り当ては値を返さないしません。これにより、<code>=</code>と<code>==</code>の誤用を防ぐことができます
** <code>switch</code>文内で<code>break</code>を行う必要はないありません。明示的に<code>fallthrough</code>を行わない限り次の<code>case</code>にフォールスルーすることはないありません
** 変数と定数は常に初期化され、配列の境界は常にチェックされます
** 算術オーバーフローは実行時エラーとしてトラップされます。オーバーフローを許可する演算子は<code>&+</code>、<code>&-</code>、<code>&*</code>、<code>&/</code>、<code>&%</code>として定義されます。また、全ての整数型にはプロパティ<code>min</code>、<code>max</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}}