我正在做这个问题集“FizzBuzz”,我的switch语句给了我一些问题,下面是我的代码:
func fizzBuzz(n: Int) -> String {
switch n {
case n % 3 == 0: print("Fizz")
case n % 5 == 0: print("Buzz")
case n % 15 == 0:print("FizzBuzz")
}
return "\(n)"
}
如果你能给我一些指针/提示,而不是给我正确的代码,那就太好了:D我宁愿自己解决这个问题,但是一些提示可以让我走出这个洞。
4条答案
按热度按时间nszi6y051#
您可以使用
case let
where
并在单独检查它们之前检查两者是否匹配:cnwbcb6i2#
只有两件事错了:
(1)您的case是布尔表达式,因此您希望将它们与
true
进行比较,而不是与n
进行比较;(2)你需要一个默认情况。所以:
06odsfpq3#
我知道这个答案有点晚了。我正在用另一种方法更新@Leo Dabus的答案,该方法是在Xcode 7.3.1和Swift 2.2上编写和测试的。
谢谢,希望这有帮助。
42fyovps4#
有点晚了,但只是为了补充各种答案。我相信现在使用的优雅解决方案是这样的:
Swift可以切换元组(排序为结构,但在代码中没有其他地方的定义)。然后在case标签中,您可以一次检查多个值,这对于FizzBuzz来说是理想的!
分解一下,这部分
生成一个有两个布尔值的元组。然后一个像这样的case标签
检查这两个值(基本上是
n%3==0
和n%5==0
)是否为true并打印“FizzBuzz”这样做使它非常容易扩展。您可以向switch参数添加第三个定义,并向case添加第三个true/false,然后您的FizzBuzz可以成为FizzBuzzJazz。如果需要,您还可以通过简单地添加标签来命名元组中的值,如
使得代码在某些情况下更可读。