Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.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
Swift 带档位开关盒_Swift_Switch Statement - Fatal编程技术网

Swift 带档位开关盒

Swift 带档位开关盒,swift,switch-statement,Swift,Switch Statement,我正在学习斯威夫特,并试图在观看视频之前自己编写Ryan Wenderlich的游戏“斗牛” 我需要给用户分数,这取决于他离目标号码有多近。我试图计算差异,然后检查范围并给用户分数,这就是我使用If else(无法使用switch case)所做的: private func calculateUserScore()->Int{ 设diff=abs(随机数-Int(bullsEyeSlider.value)) 如果diff==0{ 返回点award.bullseye.rawValue }否则,如

我正在学习斯威夫特,并试图在观看视频之前自己编写Ryan Wenderlich的游戏“斗牛”

我需要给用户分数,这取决于他离目标号码有多近。我试图计算差异,然后检查范围并给用户分数,这就是我使用If else(无法使用switch case)所做的:

private func calculateUserScore()->Int{
设diff=abs(随机数-Int(bullsEyeSlider.value))
如果diff==0{
返回点award.bullseye.rawValue
}否则,如果差值<10{
返回点award.almostbullsey.rawValue
}否则,如果差值<30{
返回点award.close.rawValue
}
返回0//用户未获得积分。
}
有没有一种方法可以更优雅地使用开关盒?
我不能只做
diff==0
例如在switch case中,因为xCode会给我一条错误消息。

您可以相应地返回所需的值

switch diff {
        case 0 :
            print("Bull Eye")
        case 1..<10 :
            print("Almost Bull Eye")
        case 10..<30 :
            print("Close")
        default :
            print("Too Far")
        }
开关差异{
案例0:
印刷品(“靶心”)

案例1..您必须在switch语句中使用范围运算符作为案例:

a…b
//它的范围是从a到b,意味着b也包括在内

a..Int{
设diff=abs(随机数-Int(bullsEyeSlider.value))
开关差{
案例0:返回点saward.bullseye.rawValue
案例1.仅适用于您:

enum PointsAward: Int {
    case close
    case almostBullseye
    case bullseye
}

private func calculateUserStory() -> Int {
    let bullsEyeSliderValue = 9
    let randomNumber = 100
    let diff = abs(randomNumber - Int(bullsEyeSliderValue))
    switch diff {
    case 0:
        return PointsAward.bullseye.rawValue
    case 0..<10:
        return PointsAward.almostBullseye.rawValue
    case 0..<30:
        return PointsAward.close.rawValue
    default: return 0
    }
}
enum PointsAward:Int{
结案
阿尔莫斯特·布尔西案
案例斗牛士
}
私有函数calculateUserStory()->Int{
让BullseeSliderValue=9
设随机数=100
设diff=abs(随机数-Int(bullseeslidervalue))
开关差{
案例0:
返回点award.bullseye.rawValue
案例0.这应该有效

private func calculateUserScore() -> Int {
    let diff = abs(randomNumber - Int(bullsEyeSlider.value))
    switch diff {
    case 0:
        return PointsAward.bullseye.rawValue
    case 1..<10:
        return PointsAward.almostBullseye.rawValue
    case 10..<30:
        return PointsAward.close.rawValue
    default:
        return 0
    }
}
private func calculateUserScore()->Int{
设diff=abs(随机数-Int(bullsEyeSlider.value))
开关差{
案例0:
返回点award.bullseye.rawValue

案例1.在我的例子中,编译器将CGFloat作为double的闭合范围,所以我必须明确地告诉编译器我正在检查CGFloat范围

   var progress: CGFloat!
   switch CGFloat(progress) {
    case 0 ... 0.25:
        barColor = .red
    case 0.25 ... 0.5:
        barColor = .yellow
    default:
        break
    }

如果您需要检查某个值是否大于任何数字或是否介于两个值之间,则可以使用
where
而不是
,如果
看起来干净一点,这将起作用

func isOutdated(days: Int) -> Outdated {

    var outdatedStatus = Outdated.none

    switch days {
    case _ where days < 5:
        outdatedStatus = .tooLow
    case 5...10:
        outdatedStatus = .low
    case 11...20:
        outdatedStatus = .high
    case _ where days > 20:
        outdatedStatus = .expired
    default:
        outdatedStatus = .none
    }
    return outdatedStatus
}
func已过期(天数:Int)->过期{
var outdatedStatus=过时。无
换班天数{
案例uu天<5天:
过期状态=.tooLow
案例5…10:
outdatedStatus=.low
案例11…20:
outdatedStatus=.high
案例uu天>20天:
outdatedStatus=.expired
违约:
outdatedStatus=.none
}
返回过期状态
}

案例0:return PointsAward.bullseye.rawValue
和案例1.很难看出使用枚举PointsAward的意义,因为您只对rawValue感兴趣。您是否在代码中的其他地方使用枚举?不,我对Swift不熟悉,只想尝试使用基本枚举。是的,我确实不需要它和你在一起。哥们,这太有趣了,我在RW上做同样的Bullsey应用时也用谷歌搜索了这个。看起来RW到处都是!在Swift break中自动切换案例。如果你需要一个故障,你需要明确提及。啊,我不知道。谢谢!!注意,你也可以编写
case..@PDK tnx来修复打字错误:)
   var progress: CGFloat!
   switch CGFloat(progress) {
    case 0 ... 0.25:
        barColor = .red
    case 0.25 ... 0.5:
        barColor = .yellow
    default:
        break
    }
func isOutdated(days: Int) -> Outdated {

    var outdatedStatus = Outdated.none

    switch days {
    case _ where days < 5:
        outdatedStatus = .tooLow
    case 5...10:
        outdatedStatus = .low
    case 11...20:
        outdatedStatus = .high
    case _ where days > 20:
        outdatedStatus = .expired
    default:
        outdatedStatus = .none
    }
    return outdatedStatus
}