Swift中的“调用中的额外参数”错误

时间:2014-12-01 01:27:18

标签: ios swift nsstring

在任何人发送我查看之前的帖子之前,请知道我已经看了很多,而且我的新手状态阻止我实施以前可能相关或可能不相关的答案。

我正在学习使用Swift编写iOS代码,作为练习我正在构建一个简单的应用程序来将里程转换为km。到目前为止,以下代码正在顺利运行:

// convert miles from string to float
var miles = (textfieldMiles.text as NSString).floatValue

// calculate kilometers
var kilometers = miles * 1.609344

// determine terminology
var termMiles = "mile"
if (miles != 1.00) {
    termMiles = termMiles + "s"
}
var termKilometers = "kilometer"
if (kilometers != 1.00) {
    termKilometers = termKilometers + "s"
}

// display results
labelMain.text = "\(miles) \(termMiles) = \(kilometers) \(termKilometers)"

我想显示小数点后只有两位数的结果里程/公里,所以我实现了以下内容:

// format numbers
miles = NSString(format:"%.2f", miles)

这给了我一个错误"呼叫中的额外参数"。我可以说,这是因为我在" miles"由于某种原因,不能使用NSString。我不知道如何解决这个问题,虽然我觉得以前的一些答案可能会有所帮助,但我还没有足够的背景知识来理解它们。某种灵魂可以解释解决方案是什么,对于奖励积分,为什么解决方案有效?

1 个答案:

答案 0 :(得分:2)

简短,直接回答

啊!这是一个不正确的编译器警告的情况。 真正的问题是您尝试将String值分配给Float类型的变量。

尝试这样的事情:let milesString = NSString(format: "%.2f", miles)并且您会发现它按预期工作 - 在首次声明miles之后,您无法将NSString重新用作Floatmiles

更长,漫无边际的答案

当您第一次声明Float变量时,Swift编译器将其推断为(textfieldMiles.text as NSString).floatValue类型,因为NSString返回的是{{1}}。然后,当您尝试将{{1}}分配给同一个变量时,编译器放弃了,因为Swift没有为您隐式转换变量类型。这不是编译器设计的疏忽,它实际上是一个非常有用的功能 - 转换类型经常发生意外而不是故意,如果你已经认识到想要明确地转换一个类型,你可能只需要编写一些转换语法就可以了。