Swift 带档位开关盒
我正在学习斯威夫特,并试图在观看视频之前自己编写Ryan Wenderlich的游戏“斗牛” 我需要给用户分数,这取决于他离目标号码有多近。我试图计算差异,然后检查范围并给用户分数,这就是我使用If else(无法使用switch case)所做的: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 }否则,如
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
}