我正在尝试将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??'
答案 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