Swift:Cast包装值

时间:2015-01-28 20:18:50

标签: ios swift casting

我正在尝试将String中的包装值转换为float,但我无法做到这一点。我想我对swift中整个包裹/解包(?/!)的东西缺少一点了解。

我正试图从标签上获取文字。

这是我的标签:

@IBOutlet weak var maxDistance: UILabel!

这是我试过的:

var max = Float(maxDistance.text)!
--> Could not find an overload for 'init' that accepts the supplied arguments

var max = Float(maxDistance.text!)
--> Cannot invoke 'init' with an argument of type '@lvalue String'

var max = Float(maxDistance!.text)
--> Cannot invoke 'init' with an argument of type '@lvalue String?'

var max = Float(maxDistance?.text)
--> Cannot invoke 'init' with an argument of type '$T4??'

2 个答案:

答案 0 :(得分:2)

这与"包装值"无关。你所说的根本就不是斯威夫特。有没有 Swift-native规定将字符串转换为Float。您可以将其转换为Int(使用toInt)。否则,您将不得不陷入Cocoa并致电floatValue。所以:

 let s = "1.3"
 let f = (s as NSString).floatValue

然而,真正的答案是你不应该这样做。如果此文本值存在Float,则应将Float保留为数据模型的一部分。从视图文本表示中提取数字完全违反了MVC(模型 - 视图 - 控制器)。

答案 1 :(得分:0)

您可以使用原始的Obj-C方法floatValue,如下所示:

var max = (maxDistance.text as NSString).floatValue