列挙
目次>
Enumerations
enum SomeEnumeration { // enumeration definition goes here }
caseが使える
enum CompassPoint { case North case South case East case West }
このようにもかける
enum Planet { case Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune }
switch〜caseで条件分岐するときに使える
一旦初期化した後は、.Southのように、enum名は省略できる。 caseには、追加してwhereで条件を付加することができる
var directionToHead = CompassPoint.West directionToHead = .West switch directionToHead { case .North: println("北へ向かいます") case .South: println("南へ向かいます") case .East: println("東へ向かいます") case .West: println("西へ向かいます") }
Associated Values?
Raw Values?
関数
目次>
よくある関数みたい
func sayHello(personName: String) -> String { let greeting = "Hello, " + personName + "!" return greeting }
引数
ラベルなしでもよい。
引数がない場合
func sayHello(){
}
引数がある場合
func sayHello(personName: String) { }
引数と返り値がある場合
func sayHello(personName: String) -> String { let greeting = "Hello, " + personName + "!" return greeting }
ラベル名と引数が同じ名称なら # を頭につけてやる func sayHello(#name: String, #age: Int) -> Int {}
ラベル:型で指定。複数ある場合は , でつなぐ 引数なしの場合は( ) (personName: String) (start: Int, end: Int) ( )
外部引数名?
外部に出す名前と別に関数内部で使う名前をつけることができる
ショートハンド外部引数名?
外部引数名と同じ名前をつけたい場合は引数名の先頭にに#をつける (#string: String, #characterToFind: Character)
デフォルトの引数値
デフォルトの値を指定できる (s1: String, s2: String, joiner: String = " ")
可変の引数
...を型の後につける (numbers: Double...)
固定と可変の引数
デフォルトでは引数は固定値。可変にしたい場合はラベルの前にvarをつける (var string: String, count: Int, pad: Character)
In-Out引数
引数としても、返り値としても使うような場合? ラベルの前にinoutをつける (inout a: Int, inout b: Int)
func swapTwoInts(inout a: Int, inout b: Int) { let temporaryA = a a = b b = temporaryA }
var someInt = 3 var anotherInt = 107 swapTwoInts(&someInt, &anotherInt)
返り値
-> 返り値の型 で指定 返り値なしの場合は->はいらない。
-> String
複数の値を返すことができる。これは便利。 -> (vowels: Int, consonants: Int, others: Int)
関数タイプ
同じ引数、同じ返り値を持つ関数を変数に入れることができる? 他の関数の引数にも使うことができるようだ 返り値にも使うことができるようだ
入れ子になった関数
条件分岐
目次>
if
( )はいらない。 ( )があってもいい。 ( )をつけないのが基本の流儀
var myMember = 1 if myMember <= 3 { println("メンバーは3人以下です。") }
if〜else
myMember = 5 if myMember <= 3 { println("メンバーは3人以下です。") }else{ println("メンバーは3人以下ではありません。") }
if〜else if〜else
switch〜case
caseに文字列が使えたりする breakはいらないみたいだけど(あってもいいみたい) caseに追加して条件をつけることができる case .South where i == 1 みたいな
enum NSEventTypeの要素を分岐させる場合、NSEventType.LeftMouseDownとしても良いし、省略して .LeftMouseDown とすることもできる。
var type:NSEventType = event.type switch type { case .LeftMouseDown : NSLog("LeftMouseDown") break case .LeftMouseUp : NSLog("LeftMouseUp") default : break }
タプル
caseにタプル)?が使える こんなの
case (-2...2, -2...2):
ポイント値の範囲などに使える
case 2, 3, 5, 7, 11, 13, 17, 19:のように複数の値を設定することができる
func function004() { let integerToDescribe = 5 var description = "The number \(integerToDescribe) is" switch integerToDescribe { case 2, 3, 5, 7, 11, 13, 17, 19: description += " a prime number, and also" fallthrough default: description += " an integer." } println(description) // prints "The number 5 is a prime number, and also an integer.” }
もっと範囲が広い場合は ... で範囲を指定することができる
case 4...9: case 10...99: case 100...999: case 1000...999_999:
バリューバインディング
where
制御文
- continue すぐにループの先頭にジャンプする
- break すぐにループを終了する
- fallthrough そのまま次へ通す。Cでbreakを使わない場合と同じ?
- return
ラベル文
複数のネスト化されたループがある場合に使用 ループに名称を付けることができて、breakするときに、どこに戻るかを明記できる。
ループ
目次>
for
普通にループ変数を設定してインクリメントするような使い方
for var index = 0; index < 3; ++index { println("index is \(index)") }
for in
基本は for i in 1...5{}
ループ変数を使う必要がない場合は省略できる for _ in 1...5{}
Obj-Cと同様、配列の要素を列挙して使うことができる
let names = ["Anna", "Alex", "Brian", "Jack"] for name in names { println("Hello, \(name)!") }
辞書の場合も、「キー」「値」の順で変数に取り込むことができる
let numberOfLegs = ["spider": 8, "ant": 6, "cat": 4] for (animalName, legCount) in numberOfLegs { println("\(animalName)s have \(legCount) legs") }
while
do-while
辞書(Dictionary)
目次>
Objective-CでDictionaryと呼ばれているもの。 他の言語では連想配列とか
func function001() ->String { var members = [ "鈴木さん": "部長", "山田さん": "課長", ] members["鈴木さん"] = "嘱託" return members["鈴木さん"]! } override func viewDidLoad() { super.viewDidLoad() NSLog("現在の役職 %@",function001()) }
要素数は .count プロパティ(?)
func function003() { var myMembers = [ "鈴木さん": "部長", "田中さん": "次長", "山田さん": "課長", ] myMembers["鈴木さん"] = "嘱託" for (theName, theTitle) in myMembers { println("\(theName): \(theTitle)") } } //=>メンバーは3人です。
for in で(key,value)として値が渡される
var myMembers = [ "鈴木さん": "部長", "田中さん": "次長", "山田さん": "課長", ] myMembers["鈴木さん"] = "嘱託" for (theName, theTitle) in myMembers { println("\(theName): \(theTitle)") } /* => 山田さん: 課長 鈴木さん: 嘱託 田中さん: 次長 */
オプショナル
func function004(){ let myMembers = ["ant":6,"snake":0,"cheetah":4] let possibleLegCount: Int? = myMembers["aardvark"] if possibleLegCount == nil{ println("Aardvarkは見つかりませんでした。") } }
NSDictionary
swiftのDictionaryではなくNSDictionaryを作ることも必要な場合があるので
//NSApplication orderFrontStandardAboutPanelWithOptions @IBAction func function015(sender: AnyObject) { NSLog("orderFrontStandardAboutPanelWithOptions") let anApplication = MyApplication.sharedApplication() //アバウトパネルの情報表示用NSDictionaryを設定 let panelDic:Dictionary<String, String> = ["Version" : "1.1", "Copyright" : "satoshi oomori"]; //表示用 for key in panelDic.keys{ println("\(key) : \(panelDic[key])"); } //アバウトパネルを表示 anApplication.orderFrontStandardAboutPanelWithOptions(panelDic) }
配列
目次>
配列は [ ] でくくってやる
配列は0から始まる。 配列xxxxのN番めの要素をYYYYYに置き換える場合は、xxxx[N]=YYYYYとする。
var shoppingList = ["catfish", "water", "tulips", "blue paint"] shoppingList[1] = "bottle of water" NSLog("---\(shoppingList[1])---")
=>---bottle of water---
letで配列を作成しても要素は置き換わる
let shoppingList = ["catfish", "water", "tulips", "blue paint"] shoppingList[1] = "bottle of water" NSLog("---\(shoppingList[1])---")
=>---bottle of water---
配列の要素の型を指定したいときには型をつけてやる。 let theArray = String;
要素の追加
配列の要素を追加するときは += で末尾に追加する
func function003() { var anArray = ["aaa","bbb","ccc"] anArray += "ddd" println("\(anArray)") } //->[aaa, bbb, ccc, ddd]
要素の修正
配列の要素の番号を指定して変更する
func function004() { var anArray = ["aaa","bbb","ccc"] anArray[0] = "AAA" println("\(anArray)") } //=>[AAA, bbb, ccc]