我不知道我在这个 Swift 项目中做错了什么?
I don't know what I'm doing wrong in this Swift project?
我正在尝试编写具有这些规则的正式系统:
- 你以字符串"MI"开始(也就是标签开头的文字)
有四个推理规则:
1) 如果字符串的最后一个字符是"I",你可以在字符串中添加一个"U" (ex: MI --> MIU)
2) x 是字母序列,Mx 可以替换为 Mxx (ex: MIU --> MIUIU)
3) 如果字符串中包含"III",可以将"III"替换为"U" (ex: MUIII --> MUU)
4) 如果字符串中包含"UU",可以删除"UU"部分(ex: MIIUU --> MII)
在我的项目中,规则1对应按钮1,规则2对应按钮2,规则3对应按钮3,规则4对应按钮4
此外,由于用户有时可能会陷入无限循环(例如:如果您达到 "MIU",从那时起您只能使用规则 2 并获得 "MIUIU" 等等) 我添加了一个 "clear" 按钮。
我希望清除按钮只是将 Label.text 变成 "MI" 这样用户就可以回到起点并重试
关键是,出于某种原因,当我按下 "clear" 按钮时,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()
}
}
代码很好 - 你的故事板中 @IBActions 和按钮之间的连接肯定有误。
重新连接所有这些,你应该没问题。
如果您在情节提要中右键单击您的 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"
}
我正在尝试编写具有这些规则的正式系统:
- 你以字符串"MI"开始(也就是标签开头的文字)
有四个推理规则: 1) 如果字符串的最后一个字符是"I",你可以在字符串中添加一个"U" (ex: MI --> MIU)
2) x 是字母序列,Mx 可以替换为 Mxx (ex: MIU --> MIUIU)
3) 如果字符串中包含"III",可以将"III"替换为"U" (ex: MUIII --> MUU)
4) 如果字符串中包含"UU",可以删除"UU"部分(ex: MIIUU --> MII)
在我的项目中,规则1对应按钮1,规则2对应按钮2,规则3对应按钮3,规则4对应按钮4
此外,由于用户有时可能会陷入无限循环(例如:如果您达到 "MIU",从那时起您只能使用规则 2 并获得 "MIUIU" 等等) 我添加了一个 "clear" 按钮。 我希望清除按钮只是将 Label.text 变成 "MI" 这样用户就可以回到起点并重试
关键是,出于某种原因,当我按下 "clear" 按钮时,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()
}
}
代码很好 - 你的故事板中 @IBActions 和按钮之间的连接肯定有误。
重新连接所有这些,你应该没问题。
如果您在情节提要中右键单击您的 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"
}