swiftとobjective-c(C言語)の違いを踏まえながら、記法について学んでいくための備忘録です。
データ表現
まず数字の表現からです。C言語では定数はconstをつけて表していました。swiftでは変数にはvar,定数にはletをつけて表します。
var test1 = 10 //varは定数 let test2 = 40 //letは定数
この表現は数字に限らず、文字列に関しても同じです。Objective-CではNSStringを使っていましたがだいぶ簡略されました。
var test1 = "hello"
文字列に変数の数字を結合することも簡単になっています。
//objective-c int num1 = 3; NSString *str = [NSString stringWithFormat:@"I have %d apples",num1); //swift let num1 = 3 let str = "I have \(num1) apples" //文字列の連結 print(str)
配列と辞書
配列や辞書にもvarやletを用いることができます。
//objective-c
NSArray *array = [@"a",@"b",@"c",@"d"] //配列
NSDictionary *occupations = [@"Haru":@"Spring", //辞書
@"Natsu":@"Summer",]
//swift
let array = ["a","b","c","d"] //配列
var occupations = ["Haru":"Spring", //辞書
"Natsu":"Summer",]
関数
func greet(person: String, day: String) -> String {
return "Hello \(person), today is \(day)."
}
オプショナル
一般には変数にnilを代入することはできません。?や!をつけるとオプショナル型となってnilを許容することができます。
//optionalについて var optionalString :String? = nil //エラーが出る var optionalString :String? = "Hello" var optionalString :String? = nil //エラーが出ない
アンラップ
オプショナル変数を用いる時にはアンラップする必要があります。?で宣言したものは変数の後に!をつけることで強制アンラップが、?を付けることでOptional Chaining(nilが入った処理はスキップ)ができます。また、Optional Binding(if文の組み合わせて変数のnilチェックを行う)方法もあります
!で宣言したものは修飾しなくても自動的に強制アンラップされます。
var optionalString :String? = nil
print(optionalString.lowercased()) //強制アンラップ(エラーが出る)
var optionalString :String? = "test"
print((optionalString?.lowercased())!) //Optional Chaining(nilが入っている時のメソッド呼び出し後の帰り値はnilになる。この場合はその後に強制アンラップしているのでエラーとなる
let string: String? = "hello world"
if let bindString = string { // Optional Binding
bindString = bindString.uppercaseString
}
let a : Int? = nil
let b = a ?? 0 // bには0が代入される //nil coalescing operator
var optionalString :String! = nil
print(optionalString.lowercased()) //(エラーが出る)