Swiftは、型注釈で型を指定できる。(型安全性)
#code(csharp){{
var a: Int // aはInt型
a = 456
a = "abc" // String型の代入はエラー
}}
nilは、「値が存在しない」ことを示す単語。
基本的に、nilを代入できない。
例外的に、nilを代入できる仕組みとして、Optional型が用意されている。
#code(csharp){{
let a: Optional<Int> // aはOptional<Int>型(nilも代入できる)
let b: Int // bはInt型(nilを代入できない)
a = nil
b = nil
}}
Swiftには、型推論という機能が用意されており、型注釈を省略しても一応動作する。
(型のエラーが発生した場合は、デバッグ時に型注釈を追記していけばOK)
#code(csharp){{
let a = 123
let b = "abc"
print (type(of: a)) // Int
print (type(of: b)) // String
}}
Swiftには、ジェネリクス(総称型)が用意されている。
ジェネリクスは、関数で扱う引数の型を「型引数」で指定/変更できる機能。
ジェネリクスが使えると、似たような機能を一つのまとめることができるので便利。
#code(csharp){{
// ジェネリクスを利用しているmax(_:_:)関数
// func max<T : Comparable>(_ x: T, _ y: T) -> T
let x = 123
let y = 456
let z = max(x, y)
print(z) // 456
let a = "abc"
let b = "def"
let c = max(a, b)
print(c) // "def"
}}
macOS向けの「Cocoa」やiOS向けの「Cocoa Touch」は、大部分がObjective-Cで書かれているフレームワーク。
Swiftは、Objective-Cと高い互換性を持っており、SwiftからCocoaやCocoa Touchの資産も利用可能。