话不多说,先放上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:刚才看了一下元组的知识、发现如果先看元组 就能明白我以上写的困惑是怎么回事了。