swift学習記録(1)

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()) //(エラーが出る)

splitViewについて

iPad ProやiPad air 2はsplitViewに対応している。splitViewはiPad内で二つ以上のアプリを同時起動させる優れものだ。自分の作っているアプリでも対応させたいが、とある調査によるとiPad air以上のシェアはせいぜい13%程度らしい。もう少し置き換えが進んだら対応したいがしばらくは様子見でもいいだろう。
2016-06-1411-22-20