-1

我正在尝试编写具有以下规则的正式系统:

  • 您从字符串“MI”开始(这是开头的标签文本)

推论有四个规则: 1)如果字符串的最后一个字符是“I”,则可以在字符串中添加一个“U”(例如:MI --> MIU)

2) Mx 是 xa 字母序列,可以用 Mxx 代替 (ex: MIU --> MIUIU)

3) 如果字符串中包含“III”,则可以将“III”替换为“U”(例如:MUIII --> MUU)

4)如果字符串中包含“UU”,可以删除“UU”部分(例如:MIIUU --> MII)

在我的项目中,规则1对应按钮1,规则2对应按钮2,规则3对应按钮3,规则4对应按钮4

另外,由于用户有时可能会陷入无限循环(例如:如果您进入“MIU”,从那时起您只能使用规则 2 并获得“MIUIU”等等)我添加了一个“清除”按钮。我希望清除按钮将 Label.text 转换为“MI”,以便用户可以返回起点并重试

关键是,由于某种原因,当我按下“清除”按钮时,Label.text 并没有像我希望的那样变成“MI”,而是变成了“MIU”!

我错过了什么?

PS:我知道这可能是我坚持的非常容易的事情,但我没有太多的编程经验

这是我的代码:导入 UIKit

class ViewController: UIViewController {

@IBOutlet weak var Label: UILabel!
@IBOutlet weak var rule1Button: UIButton!
@IBOutlet weak var rule2Button: UIButton!
@IBOutlet weak var rule3Button: UIButton!
@IBOutlet weak var rule4Button: UIButton!
@IBOutlet weak var clearButton: UIButton!



override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    clear()

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}






var string : String = "MI"
var string1 : String = ""


func rule1() {

    if string.characters.last == "I" {
    string.append("U")
    Label.text = string
    }

}


func rule2() {

    string1 = string.replacingOccurrences(of: "M", with: "")
    string = string + string1
    Label.text = string

}


func rule3() {

    string = self.string.replacingOccurrences(of: "III", with: "U")
    Label.text = string

}


func rule4() {

    string = self.string.replacingOccurrences(of: "UU", with: "")
    Label.text = string

}


func clear() {
    string = "MI"
    Label.text = string
}









@IBAction func rule1Button(_ sender: Any) {
    rule1()
}


@IBAction func rul2Button(_ sender: Any) {
    rule2()
}


@IBAction func rule3Button(_ sender: Any) {
    rule3()
}


@IBAction func rule4Button(_ sender: Any) {
    rule4()
}


@IBAction func clearButton(_ sender: Any) {
    clear()

}

}
4

1 回答 1

0

代码很好——你的故事板中@IBActions 和按钮之间肯定有错误的连接。

重新连接所有这些,你应该没问题。

如果您在 Storyboard 中右键单击 UIButton,则会显示它连接到哪个 IBAction 的信息。

在此处输入图像描述

检查所有按钮并修复损坏的按钮。

除此之外,您的代码可以大大简化,我鼓励您使用文本didSet来保留变量值。UILabel

var string : String = "" { //no need for default value here, as you are calling clear() on viewDidLoad(), better keep constants in one place
    didSet {
        Label.text = string
    }
}

func rule1() {
    if string.characters.last == "I" {
        string = string + "U"
    }
}


func rule2() {
    string = string + string.replacingOccurrences(of: "M", with: "")
}

func rule3() {
    string = self.string.replacingOccurrences(of: "III", with: "U")
}

func rule4() {
    string = self.string.replacingOccurrences(of: "UU", with: "")
}

func clear() {
    string = "MI"
}
于 2017-05-11T22:57:58.037 回答