【Swift】いろいろやってみる(文字列、配列など)
やりながらとったメモより。
ちなみに実行はコマンドラインから。設定等は前回の記事に。
Swiftをコマンドラインから実行してみる - ハイパーニートプログラマーへの道
文字列の連結
21> let label = "The width is " label: String = "The width is " 22> let width = 94 width: Int = 94 23> let widthLabel = label + String(width) widthLabel: String = "The width is94" 24> let widthLabel = label + " " + String(width) widthLabel: String = "The width is 94"
"The width is "最後にスペース入れてるんだけど、それが無視されちゃう?(23行目の結果)
間に" "かませた。
キャストは変数のほうを()で囲むんだなと。
116> let a = 10 a: Int = 10 117> let b = 10 b: Int = 10 118> var answer = a + b answer: Int = 20
この場合、answerにはvar(変数)使えよと。let使って全然だめだった。基本的なところがなってない(私が)
配列
49> var shoppingList = ["catfish", "water", "tulips", "blue paint"] shoppingList: String[] = size=4 { [0] = "catfish" [1] = "water" [2] = "tulips" [3] = "blue paint" } 50> println(shoppingList[1]) water 51> shoppingList[1] = "bottle of water" 52> println(shoppingList[1]) bottle of water
shoppingListの1番目("water")を"bottle of water"に変える。
53> println(shoppingList[0..3]) [catfish, bottle of water, tulips] 54> println(shoppingList[0...3]) [catfish, bottle of water, tulips, blue paint]
[0..3]で0番目から2番目まで表示。[0...3]で3番目まで表示。でも[]がついてるけど、どうなんでしょ。
Dictionary
62> var occupations = [ 63. "Malcolm": "Captain", 64. "Kaylee": "Mechanic", 65. ] occupations: Dictionary<String, String> = { [0] = { key = "Kaylee" value = "Mechanic" } [1] = { key = "Malcolm" value = "Captain" } } 66> println(occupations["Kaylee"]) Mechanic 67> println(occupations["Malcolm"]) Captain
キーと値を登録。キーで呼び出し。
これ、最初に"Malcom"、次に"Kaylee"を登録してるのに逆になるのはなんで?
78> var occupations = [ 79. "Malcolm": "Captain", 80. "Kaylee": "Mechanic", 81. "noriyo_tcp": "NEET", 82. ] occupations: Dictionary<String, String> = { [0] = { key = "Kaylee" value = "Mechanic" } [1] = { key = "Malcolm" value = "Captain" } [2] = { key = "noriyo_tcp" value = "NEET" } }
私を最後に登録したら2番目になったね。その上の"Kaylee"と"Malcolm"が逆になってるのはなんでなんですかと。
The Swift Programming Language: Collection Types
のサンプルコードを参考に
91> var airports: Dictionary<String, String> = [ 92. "TYO": "Tokyo", 93. "DUB": "Dublin" 94. ] airports: Dictionary<String, String> = { [0] = { key = "DUB" value = "Dublin" } [1] = { key = "TYO" value = "Tokyo" } }
一応Dictionary<String, String>も記述して、と。 だからなんで逆になるのさ?TよりDのほうがアルファベット順では先だから?
と思ったら、こちらの記事より
Tumbling Dice — [Swift]Appleの新言語「Swift」のリファレンスを読む(3)
ちなみに「Dictionaryは順序付けされていないコレクション(unordered collection)だから要素の順番は保証しないよ」とのことです。
上記のAppleのドキュメントではここの部分ですかな。
Unlike items in an array, items in a dictionary do not have a specified order.
お次は
95> var scores = [ 96. "A": 100, 97. "B": 50, 98. ] scores: Dictionary<String, Int> = { [0] = { key = "A" value = 100 } [1] = { key = "B" value = 50 } } 99> println(scores["A"]) 100 100> println(scores["B"]) 50
Keyには文字列、Valueに整数セットしてみましたが、ちゃんと<String, Int>にしてくれてますな。便利。
101> println("The dictionary of scores contains \(scores.count) items.") The dictionary of scores contains 2 items. 102> scores["C"] = 0 103> println("The dictionary of scores contains \(scores.count) items.") The dictionary of scores contains 3 items.
countプロパティで要素数の取得。scores["C"] = 0で新たに要素を追加。3itemsになった。
104> println(scores) [C: 0, A: 100, B: 50] 105> scores["D"] = nil 106> println(scores) [C: 0, A: 100, B: 50] 107> println(scores["D"]) nil 108> if let oldScore = scores.updateValue(30, forKey: "D") { 109. println("The old value for D is \(oldScore).") 110. } 111> println(scores) [C: 0, D: 30, A: 100, B: 50]
key:"D"にnilを入れてみる。println(scores)では表示されないが(当たり前か)println(scores["D"])ではnilと表示される。 updateValue()で30をセットして、古い値を返してくれるのだが(108〜110行目)、nilなんで表示はされない? 111行目でprintln(scores)すると、Dに30がセットされているのが分かる。
112> if let oldScore = scores.updateValue(10, forKey: "C") { 113. println("The old value for C is \(oldScore).") 114. } The old value for C is 0. 115> println(scores) [C: 10, D: 30, A: 100, B: 50]
Cが0なのはかわいそうなので、10にしてやる。oldScoreに0を返している。 println(scores)で確認。Cが10になってる。よかった♡
こんな感じでグダグダやってA Swift Tourの章さえ終っていないではないか・・・。