ごまなつ Blog

楽しく働ける世界を目指して

A Swift Tourをやったメモ

少しスマホアプリに興味が出てきたので、Swiftを触ってみようと思いました。とりあえず最初にA Swift Tourをやってみたのでその感想です。

A Swift Tourで何が学べる?

Swiftの基本文法が分かります。サイトからダウンロードできるPraygroundで実行結果を確認しながら学ぶことができます。

軽くまとめ

動的型付け。変数宣言は var a=42; 定数は let a=42; 型を指定したいときは let a: Double=70; と後ろに型を明示する。

キャストは String(a) 。型を前に書いてキャストしたい変数を()で囲む。

文字内変数展開は "I have (apples) apple."。()で展開したい変数を囲む。文字列を”””(ダブルクォート3つで囲むことでも宣言できる。

配列を var shoppingList = ["catfish", "water","tulips"]で宣言できる。動きはリスト。辞書は

var occupations = [
    "Malcolm" : "Captain" ,
    "Kaylee" : "Mechanic" ,
]

空を作りたいなら let emptyArray=String let , emptyDictionary=[String:float]

型情報が推測できるならshoppingList = []  occupations = [:]

for文はlet individualScores = [ 75 , 43 , 103 , 87 , 12 ] for score in individualScores {}という形。これ、foreach文だよね・・・。

if文はよくある形。nilを許すとvar optionalString : String ? = "Hello"という形にする。nilを使った二項演算子は( nickName ?? fullName )

swiich文もある。switch vegetable{} ()はいらない。

複数の辞書に対するfor文はfor ( kind , numbers ) in interestingNumbers {}

while文もある。()はいらない。do-whileではなくrepeat-while。

for i in 0 ..< 4 {}と、..<を使えばインデックスの範囲を作成できる。

関数の宣言と呼び出し方は

func greet(person : Stirng, day : String)->String{ 
   return "Hello  \ ( person ) , today is  \ ( day ) ."
}
 greet ( person : "Bob" , day : "Tuesday" )

関数の宣言に変数名と型名が必要かつ、呼び出しにも必要。返り値の方は関数宣言の最後に->を伴って書く。

タプルがあり、タプルを関数で使うときは

func calculateStatistics ( scores : [ Int ]) -> ( min : Int , max : Int , sum : Int ) {
    return ( min , max , sum )
}
 let statistics = calculateStatistics ( scores : [ 5 , 3 , 100 , 3 , 9 ])
 print ( statistics . sum )

関数をネストできる。

 func returnFifteen () -> Int {
    var y = 10
    func add () {
        y += 5
    }
    add ()
    return y
}
 returnFifteen ()

関数は型なので、関数を返り値、引数に用いることができる。

map関数がある。

numbers . map ({ ( number : Int ) -> Int in
    let result = 3 * number
    return result
})

let mappedNumbers = numbers . map ({ number in 3 * number })
 print ( mappedNumbers )

 let sortedNumbers = numbers . sorted { $0 > $1 }
 print ( sortedNumbers )

クラスがある。

class NamedShape {
    var numberOfSides : Int = 0
    var name : String

    init ( name : String ) {
        self . name = name
    }

    func simpleDescription () -> String {
        return "A shape with  \ ( numberOfSides )  sides."
    }
}

initは、インスタンスの作成時に呼ばれる関数。 サブクラスの例は

class Square : NamedShape {
    var sideLength : Double

    init ( sideLength : Double , name : String ) {
        self . sideLength = sideLength
        super . init ( name : name )
        numberOfSides = 4
    }

    func area () -> Double {
        return sideLength * sideLength
    }

    override func simpleDescription () -> String {
        return "A square with sides of length  \ ( sideLength ) ."
    }
}
 let test = Square ( sideLength : 5.2 , name : "my test square" )
 test . area ()
 test . simpleDescription ()

getterとsetterを含むこともできる。

列挙体enum、構造体structもある。メソッドを関連付けられる。

protocol(いまいちわからなかった。クラスのようなもの?)

例外処理は、try-catchではなくdo-catch。

let printerSuccess = try ? send ( job : 1884 , toPrinter : "Mergenthaler" )
let printerFailure = try ? send ( job : 1885 , toPrinter : "Never Has Toner" )

という方法も。二項演算子と理解。

defer{ 何かの処理 }を関数内に書いておくと、どこに書いていてもその関数の最後に実行され、エラーをthrowしても実行される。

ジェネリックもある。

 func makeArray < Item >( repeating item : Item , numberOfTimes : Int ) -> [ Item ] {
    var result = [ Item ]()
    for _ in 0 ..< numberOfTimes {
        result . append ( item )
    }
    return result
}
 makeArray ( repeating : "knock" , numberOfTimes : 4 )

次にやること

FoodTrackerというiOSアプリ作成チュートリアルがあるので、それをやろうと思います。