ついにニュースでも取り上げられるようになった 若者のObjective-C離れ(笑)に対応するかのごとく、出てしまったSwift について、ある程度まとめました。
より詳細なドキュメントはiTunesストアにただで置いてあります。
実際にコンパイルして動作を確認するための Xcode 6 Beta は iOS Dev Center - Apple Developer から、「規約を更新したから同意してください」的なボタンを押すと、ダウンロード出来るようになります。
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やりたかった……木曜日くらいに続き書きますー。