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 )