ついにニュースでも取り上げられるようになった 若者のObjective-C離れ(笑)に対応するかのごとく、出てしまったSwift について、ある程度まとめました。
より詳細なドキュメントはiTunesストアにただで置いてあります。
実際にコンパイルして動作を確認するための Xcode 6 Beta は iOS Dev Center - Apple Developer から、「規約を更新したから同意してください」的なボタンを押すと、ダウンロード出来るようになります。
Hello World
println("Hello, Swift!!")
以上です。main関数などのエントリーポイントはありません。セミコロンで終わるステートメントでもありません。import も特に必要ありません。 組み込み関数??
変数宣言
var myInteger = 42 myInteger = 100 let myConstant = 0 var myDouble:Double = 0 test = 100 // エラー myConstant = 100 // エラー
変数宣言はjavascript に似ています。 変数は先頭にvar、 定数は先頭にlet を明治します。varやletのない変数宣言はエラーとなります。当然ながらletで宣言した定数を変更するコードもエラーになります。
明示的に型を宣言する場合は、変数名の後にコロン(:)型名をつけます。Goっぽいですね。また、一度宣言した変数は型を変えることが出来ないようです。型キャストは出来ます。
var myInteger = 100 // myInteger = 100.0 エラー myInteger = Int(100.0) // 型キャスト
配列と辞書型( array & dictionary)
var fruits = ["apple", "banana", "cherry"] fruits[0] = "Orange" var languages = [ "C" : "old", "C++" : "too complex", "Python" : "too slow", "Objective-C" : "dead" ] println(languages["Objective-C"])
文字列にシングルクォーテーションは使えない模様。Pythonとjavascriptを足したような構文。また、辞書のキーにはあらゆる型が使える。
var floats = [ 1.0 : 100, 2.0 : 200, 3.0 : 300 ] floats[1.0] = 10000
C++のtemplate っぽい。と思っていたら空の配列、辞書宣言が以下のような感じだった。
let emptyArray = String[]() let emptyDictionary = Dictionary<String, Float>()
非常に型が大事。Dictionary は、Dictionary という型(クラス?オブジェクト?)なのか、キーワードなのかまだわかりません(汗)
制御文
var individualScores = [43, 75, 100, 87, 23] var teamScore = 0 for score in individualScores { if score > 50 { teamScore += 3 } else { teamScore += 1 } } var n:Int = 100 while n > 1{ n-- } do{ n++ } while n < 100 var firstForLoop = 0 for i in 0..3 { firstForLoop += i } var secondForLoop = 0 for var i = 0; i < 3; ++i { secondForLoop += 1 }
ブロックはお馴染みの {}で作ります。Pythonのようコロンとインデントで識別ではありません。rubyのようなbegin end でもありません。while もdo-whileも、従来型のforもpythonっぽいforも使えます。
関数
func getGasPrices(item:Double) -> (Double, Double, Double) { return (3.59, 3.69, 3.79 * item) }
複数の戻り値を返せる模様です。
クロージャー
swiftのクロージャーの表現は非常に写像っぽくていいと思いました。
func makeIncrementer() -> (Int -> Int) { func addOne(number: Int) -> Int { return 1 + number } return addOne } var increment = makeIncrementer() increment(7)
Int -> Int でINT型を引数にとってInt型を返す関数が創れるそうです。便利。
体力が尽きた/(^o^)\
研究の発表が明日じゃなかったらもうちょっとswiftやりたかった……木曜日くらいに続き書きますー。