・Swiftに関する他の記事はこちら
Swift入門 勉強記録 その1 Swiftとは、Playground起動
Array型
Array型は要素を順番に格納する。
作成方法はいくつかある。
ひとつは要素を[]でくくる。
要素はカンマで区切る。
下記のような書き方だ。
var array = [1,2,3,4,5]
要素へのアクセスは変数名[要素番号]である。
要素番号は0から始まる。
コードを書いて試す。
import UIKit
var array = [1,2,3,4,5]
println(array[0])
配列に要素を追加するにはappend(要素)を使う。
import UIKit
var array = [1,2,3,4,5]
array.append(6)
println(array)
配列の最後に6が追加されているのがわかると思う。
extend(範囲)を使うことで、まとめて追加することもできる。
import UIKit
var array = [1,2,3,4,5]
array.append(6)
array.extend(7...10)
println(array)
次は配列に文字列として11を追加してみる。
import UIKit
var array = [1,2,3,4,5]
array.append(6)
array.extend(7...10)
array.append("11")
println(array)
Intじゃないと言われ、エラーになった。
ここ、Objective-Cで使っていたNSArray(NSMutableArray)と違う。
Objective-Cでは型は気にせず、配列に入れられる。
Swiftでは異なる型を配列に入れることはできないようだ。
記載した例では
var array = [1,2,3,4,5]
で、型推測が行われ、配列の中身はInt型とされている。
明示的に型を指定する方法がある。
ひとつは変数名の後ろに[]をつけて型を指定する。
var array:[Int] = [1,2,3,4,5]
他にはgenericと呼ばれる方法だそうだが、
変数名の後ろにArrayとつける。
こんな感じだ。
var array:Array = [1,2,3,4,5]
genericについては今後勉強することになるので、今は詳細は調べない。
NSArrayと同じように様々な型を入れられる配列を作ることはできる。
そのときは指定する型をAnyObjectとするのだ。
var array:[AnyObject] = [1,"2",3,4,5]
エラーにならないか試してみる。
import UIKit
var array:[AnyObject] = [1,"2",3,4,5]
array.append("6")
println(array)
エラーならなかった。
ちなみにSwiftでもNSArrayを使うことはできるが、
Swiftが安全性を追求しているとこを見ると
Array型を使っていくのがおすすめである。
Dictionary型
Array型は要素を順序づけて格納していた。
Dictionay型はキーと値を紐付けて、格納する。
値にアクセスするときはキーをもとにアクセスすることになる。
使い方は下記の通り。
var dictionary = [1:"Father", 2:"Mother", 3:"me"]
[]の中に要素を追加していく。
:の前がキー、:の後ろが値である。
要素はカンマで区切るのだ。
import UIKit
var dictionary = [1:"Father", 2:"Mother", 3:"me"]
println(dictionary[1])
コンソールにて、Optionalと出ている。
そこについては後述。
Dictionaryのキー、値の型には型推測が使われている。
Array型と同じように型を指定することができる。
変数名の後ろに[キーの型:値の型]をつける。
例えば、こんな感じだ。
var dictionary:[Int:String] = [1:"Father", 2:"Mother", 3:"me"]
import UIKit
var dictionary:[Int:String] = [1:"Father", 2:"Mother", 3:"me"]
println(dictionary[1])
Dictionaryに要素追加するのはこうやる。
dictionary[4] = "brother"
import UIKit
var dictionary:[Int:String] = [1:"Father", 2:"Mother", 3:"me"]
dictionary[4] = "brother"
println(dictionary)
変更もできる。
import UIKit
var dictionary:[Int:String] = [1:"Father", 2:"Mother", 3:"me"]
dictionary[4] = "brother"
dictionary[3] = "sister"
println(dictionary)
削除は?
import UIKit
var dictionary:[Int:String] = [1:"Father", 2:"Mother", 3:"me"]
dictionary[4] = "brother"
dictionary[3] = "sister"
dictionary[1] = nil
println(dictionary)
話は戻るが指定したキーの要素をコンソールに表示するとOptional型であった。
import UIKit
var dictionary:[Int:String] = [1:"Father", 2:"Mother", 3:"me"]
dictionary[4] = "brother"
dictionary[3] = "sister"
dictionary[1] = nil
println(dictionary[4])
なぜか?
指定したキーの値はnilかもしれないからだ。
使うときにはunwrapしてあげよう。
こんな感じだ。
import UIKit
var dictionary:[Int:String] = [1:"Father", 2:"Mother", 3:"me"]
dictionary[4] = "brother"
dictionary[3] = "sister"
dictionary[1] = nil
if let value = dictionary[4]{
println("\(value)")
}else{
println("nilだった")
}
参照とコピー
import UIKit
var dictionaryA = [1:1, 2:4, 3:9, 4:16]
var dictionaryB = dictionaryA
println(dictionaryA)
println(dictionaryB)
dictionaryAとdictionaryBは同じだ。
import UIKit
var dictionaryA = [1:1, 2:4, 3:9, 4:16]
var dictionaryB = dictionaryA
println(dictionaryA)
println(dictionaryB)
// dictionaryBから要素を削除
dictionaryB[4] = nil
println(dictionaryA)
println(dictionaryB)
// ⇒ dictionaryAの要素は削除されていない
dictionaryBはdictionaryAの参照ではない。
dictionaryBはdictionaryAをコピーされたのだ。
Array型についても同様だ。
import UIKit
var dictionaryA = [1:1, 2:4, 3:9, 4:16]
var dictionaryB = dictionaryA
println(dictionaryA)
println(dictionaryB)
// dictionaryBから要素を削除
dictionaryB[4] = nil
println(dictionaryA)
println(dictionaryB)
// ⇒ dictionaryAの要素は削除されていない
/* 今の話の部分 */
// arrayBにArrayAを入れる
var arrayA = [1,2,3,4,5]
var arrayB = arrayA
println(arrayA)
println(arrayB)
// ⇒ arrayAとArrayBが出力した内容は同じだ
// arrayBの0番目の要素を削除
arrayB.removeAtIndex(0)
println(arrayA)
println(arrayB)
// ⇒ arrayAとarrayBで異なる内容が出力された
// Array型もDictionary型と同様にコピーするのだ
コピーなのはDictionary型とArray型で、
Objective-Cで使われたNSDitionaryやNSArrayは参照である。
変更できないArray型,Dictionary型
今までArray型やDictionary型をvar、
つまり変数として使ってきた。
変更できない固定のArray型やDictionary型を使うこともできる。
import UIKit
var dictionaryA = [1:1, 2:4, 3:9, 4:16]
var dictionaryB = dictionaryA
println(dictionaryA)
println(dictionaryB)
// dictionaryBから要素を削除
dictionaryB[4] = nil
println(dictionaryA)
println(dictionaryB)
// ⇒ dictionaryAの要素は削除されていない
// arrayBにArrayAを入れる
var arrayA = [1,2,3,4,5]
var arrayB = arrayA
println(arrayA)
println(arrayB)
// ⇒ arrayAとArrayBが出力した内容は同じだ
// arrayBの0番目の要素を削除
arrayB.removeAtIndex(0)
println(arrayA)
println(arrayB)
// ⇒ arrayAとarrayBで異なる内容が出力された
// Array型もDictionary型と同様にコピーするのだ
/* 今の話の部分 */
let arrayC = [1,2,3,4,5]
let dictionaryC = [1:1, 2:4, 3:9, 4:16]
// このarray型とdictionary型は要素を変更できない
arrayC.append(6)
arrayC.removeAtIndex(0)
dictionaryC[5] = 25
dictionaryC[1] = nil
今回はここまで。
・Swiftに関する他の記事はこちら
Swift入門 勉強記録 その1 Swiftとは、Playground起動