首页 > 解决方案 > 选择随机函数的聪明方法

问题描述

我正在尝试快速选择并运行一个随机函数。

目前我已经实现了这样的开关盒

  switch Int.random(in: 1...2) {
                            case 1:   functionOne()
                            case 2:   functionTwo()
                            default:  print("error")
                            }

如果有更多选项,则代码会变得过多。

如何改进代码以使其节省额外的行?最佳方案是:

  [functionOne(), functionTwo()].randomElement()

这不起作用,只是运行数组中的最后一个元素。有没有办法将函数放在数组中并让它们运行?

标签: swiftfunctionrandom

解决方案


如果您希望不同功能的概率不同,那么您的 switch 语句将是一个不错的选择:

switch Int.random(in: 1...100) {
                        case 1...10:   functionOne() //10% of calls
                        case 11...100: functionTwo() //90% of calls 
                        default:       noFunction()
                        }

如果您希望它们都具有相同的可能性,那么马特的方法似乎更干净:

let functions = [functionOne, functionTwo]
(functions.randomElement()!)()

推荐阅读