从三天前开始,我就对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())
一起使用
几件事:
- 尽管级联
if / else if / else if
可以工作,但如果要处理输入的所有情况,使用switch
可以更清晰(而且更容易避免遗漏情况( - 通常在Swift中,变量名和函数名以小写字母开头
- 我确信这是一个复制/粘贴问题,但类声明在
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())
}