今、友人と詳解Swiftを読んでるのですが、protocolの勉強をしたので
iOSのUIKitなどで多用されているdelegateパターンをどう実装するのか試してみました。
class Bracer {
var delegate : BracerDelegate?
func addBrace() -> String {
if let outText = delegate?.description() {
return "{ \(outText) }"
}
return "{}"
}
func addClientBrace() -> String {
let brace = delegate?.clientBrace ?? ("[", "]")
if let outText = delegate?.description() {
return "\(brace.0) \(outText) \(brace.1)"
}
return "\(brace.0)\(brace.1)"
}
}
protocol BracerDelegate {
var clientBrace : (String, String) { get set }
func description() -> String
}
class BracerClient : BracerDelegate {
var text : String
var clientBrace = ("<", ">")
init(string: String) {
text = string
}
func description() -> String {
return text
}
func printWithBrace() {
let bracer = Bracer()
bracer.delegate = self
println(bracer.addBrace())
}
func printWithMyBrace() {
let bracer = Bracer()
bracer.delegate = self
println(bracer.addClientBrace())
}
}
let bc1 = BracerClient(string: "sample code")
bc1.printWithBrace()
bc1.printWithMyBrace()
bc1.clientBrace = ("<%", "%>")
bc1.printWithMyBrace()