bussorenre Laboratory

bussorenre Laboratory

自分用 Swift 暫定まとめ(1)

ついにニュースでも取り上げられるようになった 若者のObjective-C離れ(笑)に対応するかのごとく、出てしまったSwift について、ある程度まとめました。

より詳細なドキュメントはiTunesストアにただで置いてあります。

実際にコンパイルして動作を確認するための Xcode 6 Beta は iOS Dev Center - Apple Developer から、「規約を更新したから同意してください」的なボタンを押すと、ダウンロード出来るようになります。

f:id:bussorenre:20140603102806p:plain

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"])

文字列にシングルクォーテーションは使えない模様。Pythonjavascriptを足したような構文。また、辞書のキーにはあらゆる型が使える。

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やりたかった……木曜日くらいに続き書きますー。