Swift基礎Part3 Optionalとか関数宣言とか


nilの取り扱いとOptional

Optional

Swiftでは、nil代入は基本的に許可されません。
nil代入は、「nilかもしれない」変数として明示的に宣言するようにしなければ、そもそもコンパイルが通りません。

var name:String=nil //compile error
var name:String?=nil //nilかもしれない値は、データ型の末尾に?をつける。

print("Hello,"+name!+"!") // nilかもしれない値を取り出す場合は、変数の後ろに!をつける。

ちなみに、objA.propB?.propC?.propDなどという書き方もできます。
この場合、propBやpropCがnilだった場合それ以降の処理を打ち切ってnilを返します。

つまり、JavaでよくあるNullPoやJavaScriptでよくあるundefinedのTypeErrorで落ちません。

関数の定義

関数はfuncで定義します。


func sayHello(message:String){
    print("Hello,"+message)
}

戻り値の指定

func isOdd(number:Int)->Bool{
    return (number%2) != 0
}

デフォルト引数の指定

デフォルト引数を指定できます。Javaとは違うんです。


func sayHello(message:String="World"){
    print("Hello,"+message)
}

値渡しと参照渡し

swiftは基本的に値渡しです。引数をメソッド内で書き換えるときは、inout識別子を付与する必要があります。
俗にいう「破壊的メソッド」なので多分非推奨。


func sayHello(inout msg:String){
    msg+="!!"
    print(msg)
}

var message="Hello"

sayHello(&message) //参照渡しでは、引数に&をつけて渡す。

print(message) //ここでも”Hello!!”が返るようになる

&…ポインタ…うっ…頭が…

この他にもSwiftの関数はJavaScriptのように、変数に代入したり、関数の戻り値を関数で返したりできます。柔軟性が高いですね。

私は、この本を使って勉強しています。