Swiftで遊ぼう! - 239 - CalculatorBrainをもう少し考察...
Swiftで遊ぼう!の古い記事-> Life-LOG OtherSide
忘れていく... 忘却の速さを競えば優勝できそうな勢いの私の頭... ポール先生の講義4と5を交互に見ながら内容を理解しようと努めているんですけど、むなしくなるほど忘れる項目は多い...
講義5のデモで再びCalculatorBrainクラスを扱っているけど、「あれenumってどう扱うんだっけ?」ですよ(^_^;)
Associated valueとRaw valueの使い方を理解しとかないといけませんよね。
動画の中で、CalculatorBrainクラスのコードに変化が加わっていた。
たぶん、アサインメント(宿題)の模範解答の呈示がされたのだろうか?
enum Opが拡張されていた。
enumはメソッドやプロパティ(計算型のみ)も持つことができる。
private enum Op { case Operand(Double) case UnaryOperation(String, Double -> Double) case BinaryOperation(String, (Double, Double) -> Double) var description: String { get { switch self { case .Operand(let operand): return "\(operand)" case .UnaryOperation(let symbol, _): return symbol case .BinaryOperation(let symbol, _): return symbol } } } }
String型を返す計算型プロパティが実装されている。
しかし、ちょっと考えてみると、次のようにメソッドを実装してもいいんじゃないでしょうか?
private enum Op { case Operand(Double) case UnaryOperation(String, Double -> Double) case BinaryOperation(String, (Double, Double) -> Double) func getdescription() -> String { switch self { case .Operand(let operand): return "\(operand)" case .UnaryOperation(let symbol, _): return symbol case .BinaryOperation(let symbol, _): return symbol } } var description: String { get { switch self { case .Operand(let operand): return "\(operand)" case .UnaryOperation(let symbol, _): return symbol case .BinaryOperation(let symbol, _): return symbol } } } }
var operation = Op.Operand(4)
var string = operation.description
var string1 = operation.getdescription()
どちらも同じString型の"4.0"を保持する。
今日はここまで