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!")

上記の文は3つの記号で構成されています:単語print、記号( )、文字列"test"。

print
(
   "test!"
)

文と式

Swift のコードは文と式で構成されています。

文は特定の操作を実行し、式は値を計算して返します。

例

let message = "Hello, Swift!"  // 宣言文
print(message)                // 式文

// 式の例
let sum = 5 + 3               // 5 + 3 は式であり、8 を返します
let isGreater = sum > 5       // sum > 5 は式であり、true を返します

コメント

Swift は単行コメントと複数行コメントをサポートしています。コメントはコードの機能とロジックを説明するために使用されます。

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

// これは一行のコメントです

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

/* これもコメントですが、
複数行にまたがっています */

C 言語の複数行コメントと異なる点は、Swift の複数行コメントは他の複数行コメントの内部にネストできることです。書き方は、複数行コメントブロック内に別の複数行コメントを挿入します。2番目のコメントブロックが閉じられると、その後ろに最初のコメントブロックが続きます:

/* これは最初の複数行コメントの始まりです

/* これはネストされた二つ目の複数行コメントです */

これは最初の複数行コメントの終わりです */

複数行コメントのネストにより、コードブロック内にすでにコメントがある場合でも、より迅速かつ簡単にコードブロックをコメントアウトできます。

例

// これは単行コメントです
let age = 25

/*
これは複数行コメントです
複数行にまたがることができます
コードの機能を詳しく説明するために使用されます
*/

let name = "张三"

// コメントもネストできます
/*
外側のコメント
/* 内側のコメント */

依然として外側のコメント
*/

セミコロン

他の言語とは異なり、Swift では各文の末尾にセミコロンを使用する必要はありません。;ただし、同じ行に複数の文を記述する場合は、セミコロンで区切る必要があります:

// 一般情况下不需要分号
let x = 10
let y = 20

// 在同一行写多个语句时需要分号
let a = 1; let b = 2; let c = 3

// 在某些复杂表达式中可以提高可读性
let result = calculate(); process(result)

識別子

識別子とは、変数、定数、メソッド、関数、列挙型、構造体、クラス、プロトコルなどに付ける名前のことです。

識別子を構成する文字には一定の規則があります。Swift 言語における識別子の命名規則は次のとおりです:

  • 大文字と小文字を区別します。Myname と myname は異なる識別子です;
  • 識別子の最初の文字はアンダースコア_またはアルファベットで始めることができますが、数字では始められません;
  • 識別子の他の文字はアンダースコア_、アルファベットまたは数字にすることができます。

例:userName、User_Name、_sys_val、身長 などは有効な識別子ですが、2mail、room#、class は無効な識別子です。

命名規約:

  • キャメルケース(camelCase)を使用します
  • 変数と関数名の最初の文字は小文字
  • 型名の最初の文字は大文字
  • 定数はすべて大文字(アンダースコア区切り)を使用できます
// 好的命名示例
let userAge = 25
let maxRetryCount = 3
let isUserLoggedIn = true
let serverURL = "https://api.example.com"

// 避免的命名示例
let a = 25              // 不清楚含义
let temp = 3            // 缩写不明确
let flag = true         // 不具体
let url1 = "..."        // 数字后缀不好

ブール値の命名:

// 使用疑问词开头
let isEmpty = true
let isVisible = false
let hasChildren = true
let canEdit = false
let shouldRefresh = true
let willAppear = false

注意:Swift の文字には Unicode エンコーディングが使用されています。Unicode は統一的符号化方式と呼ばれ、中国語、日本語、韓国語などのアジア文字のエンコーディングや、チャットツールで使用する絵文字まで含まれます。

どうしてもキーワードを識別子として使用する場合は、キーワードの前後にアクセント記号を追加できます。`例えば:

let `class` = "サンプル"

定数と変数

let と var キーワード

定数(let):

// 声明常量
let maximumNumberOfLoginAttempts = 10
let welcomeMessage = "欢迎使用Swift"

// 常量一旦赋值就不能更改
// maximumNumberOfLoginAttempts = 5  // 错误!不能修改常量

// 延迟初始化常量
let username: String
if userIsLoggedIn {
    username = "用户A"
} else {
    username = "访客"
}
// username 只能赋值一次

変数(var):

// 声明变量
var currentLoginAttempt = 0
var friendlyWelcome = "Hello!"

// 变量可以修改
currentLoginAttempt = 1
friendlyWelcome = "Bonjour!"

// 变量可以多次赋值
var temperature = 25.0
temperature = 30.0
temperature = 22.5

キーワード

キーワードは識別子に似た予約文字列であり、アクセント記号で囲まない限り`識別子として使用できません。キーワードは、コンパイラにとって特別な意味を持つ事前定義された予約識別子です。

一般的なキーワードには次の4種類があります。

宣言に関するキーワード

class deinit enum extension
func import init internal
let operator private protocol
public static struct subscript
typealias var

文に関するキーワード

break case continue default
do else fallthrough for
if in return switch
where while

式と型に関するキーワード

as dynamicType false is
nil self Self super
true _COLUMN_ _FILE_ _FUNCTION_
_LINE_

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

associativity convenience dynamic didSet
final get infix inout
lazy left mutating none
nonmutating optional override postfix
precedence prefix Protocol required
right set Type unowned
weak willSet

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 // 这样也是OK的

Swift リテラル

リテラルとは、特定の数値、文字列、ブール値のように、自身の型を直接示して変数に代入できる値のことです。例えば次のように:

42                 // 整型字面量
3.14159            // 浮点型字面量
"Hello, world!"    // 字符串型字面量
true               // 布尔型字面量

プリント出力

Swift は print 関数を使用して出力します:

print("サンプル") // 输出 サンプル

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()
その他の拡張