第３回名古屋Swiftハッカソン（Swift初心者向けワークショップもあり）に参加した


「Swift初心者向け」で参加して、[A Swift Tour](https://developer.apple.com/library/mac/documentation/Swift/Conceptual/Swift_Programming_Language/GuidedTour.html)をやってました。

Playgroundで色々試していたので公開。コピペで動作するはず。

## Protocol
```
// 定義
protocol ExampleProtocol {
    var simpleDescription: String { get }
    func adjust()
}

// 使い方
class SimpleClass: ExampleProtocol {
    var simpleDescription: String = "A very simple class."
    var anotherProperty: Int = 69105
    func adjust() {
        simpleDescription += "  Now 100% adjusted."
    }
}
var a = SimpleClass()
a.adjust()
let aDescription = a.simpleDescription

```

## enum
```
// 定義
enum ServerResponse {
    case Result(String, String)
    case Response(String)
    case Error(String)
}

let success = ServerResponse.Result("6:00 am", "8:09 pm")
let failure = ServerResponse.Error("Out of cheese.")
let response = ServerResponse.Response("404")

// 使い方

switch response {

case let ServerResponse.Result(sunrise, sunset):
    let serverResponse = "Sunrise is at \(sunrise) and sunset is at \(sunset)."

case let ServerResponse.Error(error):
    let serverResponse = "Failure...  \(error)"

case let ServerResponse.Response(response):
    let serverResonse = "Status: \(response)"
}
```

## Y Combinator
```
// 定義
func fix(f: (Int -> Int, Int) -> Int) -> (Int -> Int) {
    var fix_f: (Int -> Int)!
    fix_f = {(n: Int) -> Int in return f(fix_f, n)}
    return fix_f
}

// 使い方
let fib = fix {(f: Int -> Int, n: Int) -> Int in // フィボナッチ
    return n < 2 ? n : f(n - 1) + f(n - 2)
}
```

## Delegate

```
// 定義
protocol BroadcasterProtocol{
    func broadcast() -> String
}

class LocalBroadcaster:BroadcasterProtocol {
    func broadcast() -> String{
        return "On Air!"
    }
}

class Broadcaster {
    var delegate: BroadcasterProtocol?
    
    func broadcast() -> String? {
        return self.delegate?.broadcast()
    }
}


// 使い方

let broadcaster = Broadcaster()
let localBroadcaster = LocalBroadcaster()
let listen = broadcaster.broadcast()

broadcaster.delegate = localBroadcaster
let listen2 = broadcaster.broadcast()
```

## Singleton
```
// 定義
class Singleton {
    class var sharedInstance : Singleton {
        struct Static {
            static let instance : Singleton = Singleton()
        }
        return Static.instance
    }
}
```

## willSet
``` 
class History {
    var history:[Int]
    
    init(){
        self.value = 0
        self.history = []
    }
    
    var value:Int{
        willSet{
            self.history.append(self.value)
        }
    }
    
}

// test
let history = History()

history.value = 1
history.value = 2
history.value = 3

history.value
history.history

class PoppableHistory: History {
    func pop() {
        if self.history.count > 0 {
            self.value = self.history.last!
            self.history.removeLast()
            self.history.removeLast()
        }
    }
}

// test
let poppableHistory = PoppableHistory()

poppableHistory.value = 1
poppableHistory.value = 2
poppableHistory.value = 3

poppableHistory.value
poppableHistory.history

poppableHistory.pop()

poppableHistory.value
poppableHistory.history

poppableHistory.pop()
poppableHistory.pop()
poppableHistory.pop()

poppableHistory.value
poppableHistory.history
```

# for文
```
func repeat<Item>(item: Item, times: Int) -> [Item] {
    var result = [Item]()
    for i in 0..<times {
        result.append(item)
    }
    return result
}

repeat(2, 4)
```

## 最後に

講師を努めてくださった[村田 知常](https://www.facebook.com/tomotsune.murata)さん、ありがとうございました。