Swiftの特徴
静的型付き言語
- 型安全性
- コンパイル時に、変数や定数の型の情報を決定
- 型の誤りをコンパイル時に検出するので、予期せぬ型による実行時エラーが発生しない
var a: Int
// OK
a = 456
// NG
a = "abc"
型推論
- 代入値からコンパイラが型を推測できる
- 型推論の活用により変数や定数の型宣言を省略可能な場合が多い
- 記述が簡潔になる
let a = 123
let b = "abc"
print(type(of: a));
print(type(of: b));
[実行結果]
Int
String
ジェネリクス
- 特定の型に制限されない汎用的なプログラムを記述する機能
- 安全性と再利用性の両立
max関数
public func max<T>(_ x: T, _ y: T) -> T where T : Comparable
Intの比較
let x = 123
let y = 456
let z = max(x, y) // 456
Stringの比較
let x = "abc"
let y = "def"
let z = max(x, y) // def
nil許容性
- 基本的に変数や定数にnilを代入不可能
-
nil
を許容する特別な型の変数や定数にのみnil
を代入可能- 代表的な型として、
Optional<Wrapped>
- 代表的な型として、
- 想定外箇所では
nil
が使用されない
let a: Optional<Int>
let b: Int
// OK
a = nil
// NG
b = nil
Objective-Cとの連携
- 過去資産の利用
- Objective-Cからの段階的移行も可能
ObjcClass.h
#import <Foundation/Foundation.h>
@interface ObjcClass : NSObject
@property(nonatomic, strong) NSString *name;
- (void)printName;
@end
ObjcClass.m
#import "ObjcClass.h"
@implementation ObjcClass
- (void)printName {
NSLog(@"My name is %@", _name);
}
@end
Bridging-Header.h
#import "ObjcClass.h"
Swiftコード
let objcClass = ObjcClass()
objcClass.name = "makopy_inside"
objcClass.printName()
命名規則
- 単語の区切り方
-
upper camel case
- 型
- プロトコル
- モジュール
-
lower camel case
- 変数
- 定数
- 関数
-
upper camel case
- 単語の選び方
- あいまいさの解消に必要な単語は全て含める
- 一般的でない単語の使用を避ける
- 略語を避ける
- API Design Guidlines