我正在编写一个游戏,我有一个分段控件供用户选择难度级别。我在案例中添加了一些简单的代码来检查索引是否发生了变化,但似乎没有。这是代码:
@IBAction func chooseOnePlayerDifficulty(_ sender: UISegmentedControl) {
switch onePlayerGameType {
case .sluggish:
onePlayerGameType = typeOfGame.sluggish
print("Sluggish difficulty selected.")
case .average:
onePlayerGameType = typeOfGame.average
print("Average difficulty selected.")
case .ninja:
onePlayerGameType = typeOfGame.ninja
print("Ninja difficulty selected.")
}
}
现在,当我在模拟器中测试时,打印到控制台的唯一内容是“选择平均难度”。无论我选择哪一个。为什么会发生这种情况,我该如何解决?
编辑:我找到了一个答案,通过在另一个论坛上提出这个问题。谢谢你的帮助。这里的答案对我有用:Here is the link to the answer
你的代码的这一部分将onePlayerGameType
设置为.average
,当你再次选择控件时,值仍然是.average
。
case .average:
onePlayerGameType = typeOfGame.average
我有一个分段控件供用户选择难度级别
如果这就是你需要的全部,为什么你需要switch
而不仅仅是直接分配它?
enum typeOfGame : Int {
case sluggish
case average
case ninja
}
@IBAction func chooseOnePlayerDifficulty(_ sender: UISegmentedControl) {
// assuming typeOfGame is enum
let difficultyLevel = typeOfGame(rawValue: sender.selectedSegmentIndex)
onePlayerGameType = difficultyLEvel
}
我希望你在StoryBoard / XIB或代码中注册了段控制的动作方法
segmentedControl.addTarget(self, action: "chooseOnePlayerDifficulty:", forControlEvents: .ValueChanged)
尝试以下
@IBAction func chooseOnePlayerDifficulty(_ sender: UISegmentedControl) {
let selectedSegment = sender.selectedSegmentIndex
switch selectedSegment {
case 0:
onePlayerGameType = typeOfGame.sluggish
print("Sluggish difficulty selected.")
case 1:
onePlayerGameType = typeOfGame.average
print("Average difficulty selected.")
case 2:
onePlayerGameType = typeOfGame.ninja
print("Ninja difficulty selected.")
default:
print("Assing default")
}
}
编辑右@JakeG,更新答案