The Swift Programming Language 勉強記録 - 1
だいぶ間が空いてしまいました。。。
まぁ引っ越しとか色々忙しかったからですね、はい。
個人的にやりたいことも積もってきましたが、そのうちの一つがSwift。
というわけで、『The Swift Programming Languageを基にSwiftについて勉強した記録その1』です。
optional value
Swiftはただの変数宣言ではnilを代入することはできない。
var str: String = "Hello, world!" str = nil // 静的解析時エラー
nilを代入するためにはoptional valueとして宣言する必要がある。
optional valueとして宣言するには型の後ろに?をつける。
var str: String? = "Hello, world!" str = nil
この言語仕様のおかげで、変数利用時にnilが入っている可能性があるかないかが明示的となり、実行時にnilに起因したクラッシュを回避しやすくなる。
for-in
Dictionaryに対してfor-inを使うと例えばこんな感じ。
let interestingNumbers = [ "Prime": [2,3,5,7,11,13], "Fibonacci": [1,1,2,3,5,8], "Square":[1,4,9,16,25] ] var largestNumber = 0 var largestKind = "" for (kind, numbers) in interestingNumbers { for number in numbers { if number > largestNumber { largestNumber = number largestKind = kind } } } largestNumber // 25 largestKind // Square
switch
breakが不要。
case節に最低1文の処理が必要なため、何もしない場合はbreakを使うと良い。
default節は取りうるすべての値をカバーしていない限り省略不可。
breakしたくないときはfallthroughをcase節の末尾に記述。
let vegetable = "red pepper" switch vegetable { case "celery": let vegetableComment = "Add some raisins and make ants on a log." case "cucumber", "watercress": let vegetableComment = "That would make a good tea sandwich." // 関数を使用したい場合はこう↓ case let x where x.hasSuffix("pepper"): let vegetableComment = "Is it a spicy \(x)?" fallthrough // 仮にdefault節をコメントアウトした場合、以下のエラーが出る // Switch must be exhaustive, consider adding a default clause default: let vegetableComment = "Everything tastes good in soup." } // "Is it a spicy red pepper?" // "Everything tastes good in soup."
range
..< と ... は range operatorになっていて範囲指定ができる。
// ..<で末尾の値を含まないrange var firstForLoop = 0 for i in 0..<4 { firstForLoop += i } firstForLoop // 6 // ..<と全く同じ var secondForLoop = 0 for var i = 0; i < 4; ++i { secondForLoop += i } secondForLoop // 6 // ...を使った場合は末尾の値を含む var thirdForLoop = 0 for j in 0...4 { thirdForLoop += j } thirdForLoop // 10
とりあえずその1はここまで、です。
続くかなぁ。。。