Swiftで遊ぼう! on Hatena

あしたさぬきblogでやってた初心者オヤジのiOSプログラミング奮闘記がHatenaに来ました

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"を保持する。

今日はここまで