Swift 基本構文
前の章で、Swift言語の「Hello, World!」プログラムを作成する方法について説明しました。ここで復習しましょう。
OS X playground を作成する場合は、Cocoa をインポートする必要があります:
例
/* 私の最初の Swift プログラム */
var myString = "Hello, World!"
print(myString)
iOS playground を作成したい場合は、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 のコードは文と式で構成されています。
文は特定の操作を実行し、式は値を計算して返します。
例
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()その他の拡張