Swift 基本構文

他の記事では、Swift言語で「Hello, World!」プログラムの作り方について説明しました。次には復習しましょう。

OS X playgroundを作成する場合は、Cocoaをインポートする必要があります。

import Cocoa

/* 最初のSwiftプログラム */
var myString = "Hello, World!"

print(myString)

iOS playgroundを作成する場合、UIKitをインポートする必要があります。

import UIKit
var myString = "Hello, World!"
print(myString)

上記のプログラムを実行すると、出力結果は次の通りです。

Hello, World! 

上記のコードはSwiftプログラムの基本構造です。次には、構造の構成について詳しく説明します。

Swift インポート

importステートメントによって、Objective-Cフレームワーク(またはCライブラリ)をSwiftプログラムにインポートできます。例えば、import cocoaステートメントはCocoaライブラリとAPIをインポートするため、Swiftプログラムで使用できます。

Cocoa自体はObjective-C言語で記述されており、Objective-CはC言語の厳密なスーパーセットであるため、SwiftアプリケーションのC ++コードでさえ、C言語コードを簡単に組み合わせることができます。

Swift マーク

Swiftプログラムは、単語、識別子、定数、文字列、記号など、さまざまな種類のマークで構成されています。 例えば、下記のSwiftプログラムは、3種類のマークで構成されています。

print("test!")

上記のステートメントは、単語(print)、記号(()、文字列( “test”)の3つのマークで構成されています。

print
(
   "test!"
)

コメント

SwiftのコメントはC言語と非常に似ており、1行コメントは2つのスラッシュで始まります。

//これはコメントの行だ

複数行のコメントは/*で始まり、*/で終わりです。

/* これもコメントだが、
複数の行にまたがる */

C言語の複数行のコメントとは異なり、Swiftの複数行コメントは他の複数行のコメント内にネストできます。記入方法は、複数行のコメントブロックに別の複数行のコメントを挿入することです。 2番目のコメントブロックが閉じられる場合、最初のコメントブロックは引き続きます。

/* これは最初の複数行のコメントの先頭だ

/* これは2番目のネストされた複数行のコメントだ */

最初の複数行のコメントの最後だ */

複数行のコメントをネストすると、コードブロックにすでにコメントがある場合でも、コードブロックにすばやくコメントを付けられます。

セミコロン

他の言語とは異なり、Swiftでは各ステートメントの最後にセミコロン(;)を付ける必要はありませんが、同じ行に複数のステートメントを記述する場合は、それらをセミコロンで区切る必要があります。

import Cocoa
/* 最初のSwiftプログラム */
var myString = "Hello, World!"; print(myString)

識別子

識別子とは、変数、定数、メソッド、関数、列挙、構造、クラス、プロトコルなどに割り当てられた名前です。 識別子を構成する文字には特定の規則があります。Swift言語での識別子の命名規則は次のとおりです。

  • 大文字と小文字が区別されます。Mynameとmynameは2つの異なる識別子です。
  • 識別子の最初の文字は、アンダースコア(_)または文字で始めることができますが、数字で始めることはできません。
  • 識別子にある他の文字は、アンダースコア(_)、文字、または数字にすることができます。

例えば:userName、User_Name、_sys_valなどは有効な識別子ですが、2mail、room#、classは不正な識別子です。

ヒント:Swiftの文字はUnicode[1]を採用されます。Unicodeは文字集合と呼ばれ、日本語、韓国語、その他の文字などのアジアの文字コード、さらにはチャットツールで使用する絵文字も含まれます。

キーワードを識別子として使用する必要がある場合は、キーワードの前後にアクセント記号( `)を追加できます。次には例を挙げます。

let `class` = "Ceodata"

キーワード

キーワードは識別子に類似する予約文字のシーケンスであり、アクセント記号( `)で囲まれていない限り識別子として使用できません。キーワードは、コンパイラにとって特別な意味を持つ事前定義された予約済み識別子です。 常用のキーワードは下記の4つの種類があります。

宣言に関わるキーワード

classdeinitenumextension
funcimportinitinternal
letoperatorprivateprotocol
publicstaticstructsubscript
typealiasvar

ステートメントに関わるキーワード

breakcase continuedefault
doelsefallthroughfor
ifinreturnswitch
wherewhile

式とタイプのキーワード

asdynamicTypefalseis
nilselfSelfsuper
true_COLUMN__FILE__FUNCTION_
_LINE_

特定のコンテキストで使用されるキーワード

associativityconveniencedynamicdidSet
finalgetinfixinout
lazyleftmutatingnone
nonmutatingoptionaloverridepostfix
precedenceprefixProtocolrequired
rightsetTypeunowned
weakwillSet

Swift スペース

Swift言語は、C/C++、Javaのようにスペースを完全に無視するわけではありません。Swiftはスペースの使用について特定の要件がありますが、Pythonのインデント要件ほど厳密ではありません。

Swiftでは、演算子は変数や定数の後ろに放置できません。例えば、次のコードはエラーを報告します。

let a= 1 + 2

エラーメッセージ:

error: prefix/postfix '=' is reserved

前置/後置演算子のイコール記号は予約されているを意味します。

下記のコードもエラーが報告されます。(スペースに注意してください)

let a = 1+ 2

エラーメッセージ:


error: consecutive statements on a line must be separated by ';'

これは、Swiftが1+というステートメントまで終了し、2が次のステートメントであると見なしているためです。

正しい書き方は次の通りです。

let a = 1 + 2;  // この書き方を推奨している
let b = 3+4 // これも大丈夫だ

Swift リテラル

リテラルとは、特定の数値、文字列、ブール値など、タイプを直接示し、変数に値を割り当てることができる値を意味します。次には例を挙げます。

42                 // 整数リテラル
3.14159            // 浮動小数点リテラル
"Hello, world!"    // 文字列リテラル
true               // ブールリテラル

出力

Swiftは、print関数によって出力します。

print("Ceodata") // Ceodataを出力する

print関数はグローバル関数であり、完全な関数シグネチャは次のとおりです。

public func print(items: Any..., separator: String = default, terminator: String = default)

折り返さずに出力したい場合は、最後のパラメータを空の文字列に割り当てるだけでいいです。

for x in 0...10{
    print("\(x) ", terminator: "")
}
print()

出力結果:

0 1 2 3 4 5 6 7 8 9 10 

ユーザーが入力した内容を受け取る必要がある場合は、readLine()を使用できます。

let theInput = readLine()
Share

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です