Swift 递归枚举

话不多说,先放上Swift 学习得网站 http://www.swift51.com/swift4.0/chapter2/08_Enumerations.html

今天学swift 到了递归枚举得代码主要记录一下学到得问题、代码如下:

indirect enum ArithmeticExpression {
    case number(Int)
    case addition(ArithmeticExpression, ArithmeticExpression) //元组
    case multiplication(ArithmeticExpression, ArithmeticExpression)
}

indirect 表示 枚举类型ArithmeticExpression 得成员都是可递归得

 

let five = ArithmeticExpression.number(5)
let four = ArithmeticExpression.number(4)
let sum = ArithmeticExpression.addition(five, four)
let product = ArithmeticExpression.multiplication(sum, ArithmeticExpression.number(2))

 

func evaluate(_ expression: ArithmeticExpression) -> Int {
    switch expression {
    case let .number(value):
        return value
    case let .addition(left, right):
        return evaluate(left) + evaluate(right)
    case let .multiplication(left, right):
        return evaluate(left) * evaluate(right)
    }
}

print(evaluate(product))
// 打印 "18"

这个是网址上得代码。

一开始我照着手敲得时候 发现了一个让我很困惑得问题,left、right 这两个小老弟 到底是什么意思?

百度搜了一下 swift 递归枚举,出现得都是我上面复制得这些代码。

一首歌曲过后,我做了一个尝试就是把枚举类型得关联值方法改变一下:

1.case multiplication(ArithmeticExpression,ArithmeticExpression,ArithmeticExpression,ArithmeticExpression)  添加了两个类型。

相对应得也得改下面这段代码:

2.let product = ArithmeticExpression.multiplication(sum, ArithmeticExpression.number(2), ArithmeticExpression.number(2), ArithmeticExpression.number(2))

最关建得evaluate 方法里 我做了如下尝试:

3.  case let .multiplication(a, b,c,d):
        return evaluate(a) * evaluate(b)*evaluate(c)*evaluate(d)

然后调用 print(evaluate(product)) 结果为 72.

我得困扰终于解决了,left 也好、right 也好 指得只是关联值, 像我在上面定义得abcd 就是分别对应得multiplication(ArithmeticExpression,ArithmeticExpression,ArithmeticExpression,ArithmeticExpression)

就算你起 q、e、r、w 都可以。

不知道是我看教程不认真 还是如何。总算自己发现了问题。

写了很久OC,现在学习swift 很不习惯。

刚才看了一下好像关联值可以是 元组。再把元组得知识回顾一下。

刚学了2天、说的不对得地方 请大家指出 我会学习。

PS:刚才看了一下元组的知识、发现如果先看元组 就能明白我以上写的困惑是怎么回事了。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值