我正在Swift中构建一个空闲的Clicker应用程序,并通过一个函数添加了自动点击。我希望能够通过功能的输入来输入价格,但是由于输入是一个常数,因此我无法像每次用户单击升级时一样,将成本价格增加9%。
例如,如果我在initialPrice中键入50.0,我将如何设置它,以便每次用户单击它时将其增加10%。
func upgrade(intialPrice : Float) {
var upgradePrice = intialPrice
AutoClicks += 1
totalClicks = totalClicks - Int(upgradePrice)
upgradePrice = upgradePrice + (upgradePrice * 0.1)
burritoLvl1Label.text = ("$" + "\(Int(upgradePrice))")
}
我对编码非常陌生,因此,如果您能以任何方式将其缩短,那将非常有帮助。
答案 0 :(得分:2)
您需要将值作为String ts = "2019-01-21T05:56:46.000Z";
String date = ts.split("T")[0];
String[] splitDate = date.split("-");
int day = Integer.parseInt(splitDate[2]);
String month = "";
switch(Integer.parseInt(splitDate[1]))
{
case 1:
month = "JAN";
break;
case 2:
month = "FEB";
break;
.
.
.
}
System.out.println("Day: " + day + ", Month: " + month);
参数传入才能对其进行突变。您还可以使用compound assignment operators,inout
,+=
和-=
来简化实现。您还应该确保遵守Swift命名约定,函数和变量名称(*=
的类型为loweCamelCase,类型的类型为UpperCamelCase。
autoClicks
但是,您应该知道,在大多数情况下,您应该从函数返回变异值,而不是通过将其作为func upgrade(initialPrice: inout Float) {
autoClicks += 1
totalClicks -= Int(upgradePrice)
upgradePrice *= 1.1
burritoLvl1Label.text = ("$" + "\(Int(upgradePrice))")
}
参数传入来对其进行变异。在不使用inout
参数修改其他实例变量的情况下,对类的某些实例变量进行突变而不将其明确传递给函数的做法特别不明智。
答案 1 :(得分:2)
其他答案建议使用inout
参数,虽然可以使用,但我建议不要使用这种模式。通常,最好避免在函数中出现“副作用”,仅在有充分理由的情况下使用inout
。
更通用的方法是拥有一个return
新值的函数。
您可能还希望在处理货币时考虑使用Decimal
而不是Float
。
类似地,此功能中可能不应该更新标签
func upgrade(initialPrice : Decimal) -> Decimal {
autoClicks += 1
totalClicks -= Int(truncating: initialPrice as NSDecimalNumber)
return initialPrice * 1.1
}
然后您可以像下面这样调用此函数:
price = upgrade(initialPrice: price)
burritoLvl1Label.text = ("$" + "\(Int(truncating:price as NSDecimal))")
答案 2 :(得分:1)
您应该将输入参数设置为 inout 。
有关swift functions的更多信息。
func upgrade(intialPrice: inout Float) {
var upgradePrice = intialPrice
AutoClicks += 1
totalClicks = totalClicks - Int(upgradePrice)
upgradePrice = upgradePrice + (upgradePrice * 0.1)
burritoLvl1Label.text = ("$" + "\(Int(upgradePrice))")
}
希望有帮助!