Xcode6 beta 4垂头倾斜浮动

时间:2014-07-28 19:55:34

标签: swift xcode6

我有Dictionary StringAnyObject,所以[String: AnyObject]

在一个函数中,我想检查dict值的类型。所以这段代码在Xcode6-Beta 3中有效:

for (key, value: AnyObject) in contents {
    ...
    } else if value is Float {
        stringValue = String(value as Float) + "," 

现在我收到错误:AnyObject is not convertible to Float

stringValue = String(Float(value)) + ","不起作用。

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

AnyObject投射到Float 没有问题。

AnyObject转换为Float没有任何问题,因为您可以看到下面的指令会毫无错误地执行。

   var f:Float = value as Float

由于swift String没有intializer转换为Float 如果你这样做

 var str:String = String(f) //This will show error as swift has no intializer for Float

但是Swift只为String添加了初始化,以便Int直接转换。Float没有初始值。

   var i:Int = value as Int
   var str:String = String(i) //this will run fine

现在可以解决你的问题

    for (key, value: AnyObject) in contents {
        if(value is Int){
        }else if value is Float {
            //Take this in var and use
            var stringValue = "\(value as Float),"
        }
    }

将来swift可能会为Float添加初始化程序,但目前没有初始化程序。

答案 1 :(得分:1)

替换" as"与" as!"强迫垂头丧气。

请记住,只有当您确定向下转换将始终成功时,才能使用类型转换运算符的强制形式(如!),否则将触发运行时错误。在您的特定情况下,由于存在先前的检查(如果值为Float),则没有问题。

答案 2 :(得分:0)

你不能转换为浮动因为:

  

AnyObject可以表示任何类类型的实例。

From Swift Programming Guide

但是float不是一个班级。您必须使用Any代替:

  

除了函数类型之外,任何可以表示任何类型的实例。

From Swift Programming Guide

这应该可行(但我无法在当前的Mac上测试):

for (key, value: Any) in contents {
    ...
    } else if value is Float {
        stringValue = String(value as Float) + "," 

答案 3 :(得分:0)

正如wumm所说,你不能直接转换为Float,因为Float不是类类型。您可以将它转换为NSNumber并桥接到Float。尝试

value as NSNumber as Float

此策略适用于将AnyObject强制转换为Swift字符串。

使用您的代码并修复连接,它将如下所示:

for (key, value: AnyObject) in contents {
    if value is Float {
        stringValue = "\(stringValue) \(value as NSNumber as Float) ,"
    }
}