swift - 从函数内的各个循环返回一个值

标签 swift nested

我试图从包含大量循环的函数返回领域对象。该函数的要点是使用 switch 语句创建一个随机加权生成器,以在下限和上限累积概率的各个“桶”之间进行解析,直到随机生成的双数落在这些桶之一中,从而返回学生对象。

我最初只是在选择正确的学生时更改标签,但我需要在函数之外编辑学生的其他参数,因此我不能再从函数返回名称,而是需要返回对象。旧代码附在下面。我所做的唯一更改是将返回的参数添加到函数名称: func randomWeightedStudent() -> Student { ... } 而不是 StudentNameLabel.text = currentStudent.name 我想返回 currentStudent

func randomWeightedStudent() {

    let randomValue = Double.random(in: 0.00 ... 1.00)

    if let numberOfStudents = students?.count  {

        for i in 0 ... (numberOfStudents - 1) {

            guard let currentStudent = students?[i] else { continue }

            if i == 0 {

                switch randomValue {

                case (0 ... (currentStudent.prob)) :
                    studentNameLabel.text = currentStudent.name
                default :
                    break
                }

            } else if i < numberOfStudents {

                guard let lastStudent = students?[i-1] else { continue }

                switch randomValue {

                case (lastStudent.cumProb) ... (currentStudent.cumProb) :
                    studentNameLabel.text = currentStudent.name
                default :
                    break
                }

            } else if i == numberOfStudents {

                switch randomValue {

                case (currentStudent.cumProb) ... 1 :
                    studentNameLabel.text = currentStudent.name
                default :
                    break
                }
            }
        }
    }
}

如上所述,我希望能够说 return currentStudent 代替 StudentNameLabel.text = currentStudent.name 但我没有成功。错误是生成该函数需要一个返回值,这使我推测我需要以某种方式在每个循环中返回该值

最佳答案

这就是我实现返回 Student 对象或 nil 的函数的方式。我还对代码进行了一些其他简化以使其更加清晰。

func randomWeightedStudent() -> Student? {
    let randomValue = Double.random(in: 0.00 ... 1.00)
    guard let students = students else { return nil }
    let numberOfStudents = students.count

    for i in 0..<numberOfStudents {
        let currentStudent = students[i]
        if i == 0 {
            switch randomValue {
            case (0 ... (currentStudent.prob)) :
            return currentStudent
            default :
                break
            }
        } else if i < numberOfStudents {
            let lastStudent = students[i-1]
            switch randomValue {
            case (lastStudent.cumProb) ... (currentStudent.cumProb) :
                return currentStudent
            default :
                break
            }
        } else if i == numberOfStudents {
            switch randomValue {
            case (currentStudent.cumProb) ... 1 :
                return currentStudent
            default :
                break
            }
        }
    }
    return nil
}

关于swift - 从函数内的各个循环返回一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57657830/

相关文章:

ios - 完成处理程序返回两次

ios - 如何在 Sprite Kit 中显示弹出式插页式广告?

list - 嵌套数据结构中的过滤/模式匹配

jquery - 如何使用 jQuery 隐藏其子 ul-li 元素全部隐藏的父 li-元素?

nested - Drools-规则层次结构和条件执行

swift - 如何访问 Siri Remote 播放/暂停按钮和覆盖菜单按钮

ios - 在 Objective-C 中处理闭包中的快速抛出

ios - Siren库如何获取当前的应用商店版本?

python - 根据条件从嵌套列表中删除某些子列表

xaml - 使用WPF关闭嵌套选项卡?