Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 返回错误输出的Swift函数_Ios_Swift - Fatal编程技术网

Ios 返回错误输出的Swift函数

Ios 返回错误输出的Swift函数,ios,swift,Ios,Swift,我创建了一个函数,可以打印学生所在的位置-课程、长休息或短休息(以及哪个短休息) 功能参数包括: shortBreak - duration of short break longBreak - duration of long break lesson - after which lesson is long break time - the time where students are located 我测试函数的参数是 currently(shor

我创建了一个函数,可以打印学生所在的位置-课程、长休息或短休息(以及哪个短休息)

功能参数包括:

    shortBreak - duration of short break
    longBreak - duration of long break
    lesson - after which lesson is long break
    time - the time where students are located
我测试函数的参数是

   currently(shortBreak: 5, longBreak: 15, lesson: 3, time: "10:37)
应该如此

  8:00 - 8:45 - lesson
  8:45 - 8:50 - short break
  8:50 - 9:35 - lesson
  9:35 - 9:40 - short break
  9:40 - 10:25 - lesson
  10:25 - 10:40 - long break (after 3.lesson is long break)
  
if currentMinute >= 60 {
    currentHours += 1
    currentMinute = currentMinute - 60
}
这意味着学生们目前正在长时间休息,但我的输出显示他们正在上课

我再次检查了代码,但我找不到哪里错了

还有,有没有更好的方法来操纵时间参数

import UIKit

enum current {

case lesson
case shortBreak
case longBreak

}

func currently(shortBreak: Int, longBreak: Int, lesson: Int, time:String){

    var shortBreakCounter: Int = 0
    var currentLesson: Int = 1
    var currentHours: Int = 8
    var currentMinute: Int = 0
    var currentCase: current = .lesson


    let minute: Int = Int(time.suffix(2)) ?? 0
    let hour: Int = Int(time.prefix(2)) ?? 0

    if(checkValid(hour: hour, minute: minute)){
    
        print("Invalid time")
    }

    else {
  
        while isInRange(hour: currentHours, minute: currentMinute) {
    
            currentCase = .lesson
    
            currentMinute += 45
    
            if currentMinute >= 60 {
                currentHours += 1
                currentMinute = 0
            }
    
            if currentLesson == lesson {
            
                currentCase = .longBreak
            
                currentMinute += longBreak
            
                if currentMinute >= 60 {
                    currentHours += 1
                    currentMinute = 0
                }
            
            } else{
              
                currentCase = .shortBreak
            
                currentMinute += shortBreak
            
                shortBreakCounter += 1
            
                if currentMinute >= 60 {
                    currentHours += 1
                    currentMinute = 0
                }
            
            }
        
            currentLesson += 1
    
        }

        switch currentCase {
    
            case .shortBreak:
                print("Students are on \(shortBreakCounter) short break")
            case .longBreak:
                print("Students are on long break")
            default:
                print("Students are on lesson")
            }
  
    }

}

func checkValid(hour: Int, minute:Int) -> Bool {

    if hour >= 16 || hour < 8 {
    
        return true
    
    } else if minute > 59 || minute < 0 {
     
        return true
    }

    return false

}

func isInRange(hour: Int, minute: Int) -> Bool{

    if 8..<16 ~= hour &&  0..<60 ~= minute  {
    
        return false

    }

        return true

    }

    currently(shortBreak: 5, longBreak: 15, lesson: 3, time: "10:37")
导入UIKit
枚举电流{
案例课
案例短路
凯斯隆布雷克
}
func当前(短中断:Int,长中断:Int,课程:Int,时间:String){
var shortBreakCounter:Int=0
var currentLesson:Int=1
var当前小时数:Int=8
var currentMinute:Int=0
var currentCase:current=.lesson
分钟:Int=Int(时间后缀(2))??0
让小时数:Int=Int(时间前缀(2))??0
如果(检查有效(小时:小时,分钟:分钟)){
打印(“无效时间”)
}
否则{
当isInRange(小时:当前小时,分钟:当前分钟){
当前案例=.lesson
当前分钟+=45
如果当前分钟>=60{
当前小时数+=1
当前分钟=0
}
如果当前课程==课程{
currentCase=.longBreak
currentMinute+=longBreak
如果当前分钟>=60{
当前小时数+=1
当前分钟=0
}
}否则{
currentCase=.shortBreak
currentMinute+=短路
短路计数器+=1
如果当前分钟>=60{
当前小时数+=1
当前分钟=0
}
}
当前课程+=1
}
开关电流箱{
案例.短接:
打印(“学生在\(短路计数器)短路”)
案例.朗布雷克:
打印(“学生长时间休息”)
违约:
打印(“学生正在上课”)
}
}
}
func checkValid(小时:整数,分钟:整数)->Bool{
如果小时>=16 | |小时<8{
返回真值
}否则,如果分钟>59 | |分钟<0{
返回真值
}
返回错误
}
func-isInRange(小时:整数,分钟:整数)->Bool{

如果checkValid为true,则If8..isInRange始终返回false。您总是得到默认的currentCase(第一课)

“编辑时间参数”的更好方法是使用日期

if currentMinute >= 60 {
    currentHours += 1
    currentMinute = 0
}
这是错误的,您应该将
currentMinute
设置为当前值-60

想象一下,如果该值为75,则由于将其设置为0,15分钟已经过去

应该是

  8:00 - 8:45 - lesson
  8:45 - 8:50 - short break
  8:50 - 9:35 - lesson
  9:35 - 9:40 - short break
  9:40 - 10:25 - lesson
  10:25 - 10:40 - long break (after 3.lesson is long break)
  
if currentMinute >= 60 {
    currentHours += 1
    currentMinute = currentMinute - 60
}

目前(shortBreak:5,Longbbreak:15,lesson:3,time:“10:37)
,你怎么能断定这是一次长时间休息?请解释一下,作为问题的一部分。我编辑了问题这看起来很脆弱,我会考虑创建一些自定义类型保存数据和逻辑。类似于某种模式结构,由另一种类型的集合组成,或者只是一个带有开始时间、持续时间等的自定义类型,链接到一个链表(如链表)上