Swift:如何在if-else语句中连续更改变量



从三天前开始,我就对Swift一无所知,目前正在尝试制作一个简单的if-else语句,只是为了尝试它的函数,在其中我想更改应该从函数返回的字符串的值,如下所示:

class TestClass(){    
var TestString = "0"

func TestFunc()->String {


if (TestString == "0") {
TestString = "5"
}
else if (TestString == "5") {
TestString = "8"
}
else if (TestString == "8") {
TestString = "12"
}
else if (TestString == "12") {
TestString = "17"
}
else if (TestString == "17") {
TestString = "25"
}

return TestString
}
}

但是当我用InterfaceController的这段代码测试这个方法时:

@IBAction func test(){

print(TestClass().TestFunc())

}

当我第一次点击按钮时;5〃;正如预期的那样。但第二次和第三次,等等,它不断地打印";5〃;即使我在每个if/else-if语句之后不断更新TestString的值。感觉TestString没有更新它的值,或者如果它在每次点击之间重置。

有人认为这是一个很好的解决方案吗?

就像@sashe-sinha评论的那样,您看到的问题是"print(TestClass(。TestFunc(("每次被调用时都会创建一个类型为TestClass的新对象,而您希望保持的状态实际上每次都会重置。

在某处创建一个var test = TestClass()对象,然后将其与print(test.TestFunc())一起使用

几件事:

  1. 尽管级联if / else if / else if可以工作,但如果要处理输入的所有情况,使用switch可以更清晰(而且更容易避免遗漏情况(
  2. 通常在Swift中,变量名和函数名以小写字母开头
  3. 我确信这是一个复制/粘贴问题,但类声明在class TestClass(){中没有使用()

所有这些:

class TestClass {
var testString = "0"
func testFunc() -> String {
switch (testString) {
case "0":
testString = "5"
case "5":
testString = "8"
case "8":
testString = "12"
case "12":
testString = "17"
case "17":
testString = "25"
default:
break; // Do what you need in this case
}
return testString
}
}

然后:

var test = TestClass()
// ...
@IBAction func test() {       
print(test.testFunc())      
}

最新更新