Swift Xcode6 beta 4下行至浮动

Swift Xcode6 beta 4下行至浮动,swift,xcode6,Swift,Xcode6,我有一本字典,里面有字符串和任何对象,所以[String:AnyObject] 在函数中,我想检查dict值的类型。这段代码在Xcode6 Beta 3中运行: for (key, value: AnyObject) in contents { ... } else if value is Float { stringValue = String(value as Float) + "," 现在我得到了一个错误:任何对象都不能转换为Float stringVa

我有一本
字典
,里面有
字符串
任何对象
,所以
[String:AnyObject]

在函数中,我想检查dict值的类型。这段代码在Xcode6 Beta 3中运行:

for (key, value: AnyObject) in contents {
    ...
    } else if value is Float {
        stringValue = String(value as Float) + "," 
现在我得到了一个错误:
任何对象都不能转换为Float

stringValue=String(Float(value))+“,”
也不起作用


有什么想法吗?

您不能强制转换为浮动,因为:

任何对象都可以表示任何类类型的实例

但是
float
不是一个类。您必须使用
Any

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

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


AnyObject
强制转换为
Float
没有问题

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

   var f:Float = value as Float
由于swift
String
没有
initializer
转换为
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
添加初始化器,但目前没有初始化器。

正如wumm所说,不能直接强制转换为Float,因为Float不是类类型。您可能可以将其转换为NSNumber,并将其转换为Float。试一试

value as NSNumber as Float
此策略用于将任意对象强制转换为Swift字符串

使用您的代码并修复连接,它看起来像:

for (key, value: AnyObject) in contents {
    if value is Float {
        stringValue = "\(stringValue) \(value as NSNumber as Float) ,"
    }
}
将“as”替换为“as!”以强制向下投射


请记住,只有在确信向下转换总是成功的情况下,才能使用强制形式的类型转换运算符(as!),否则将触发运行时错误。在您的特定情况下,不会有任何问题,因为之前有一个检查(如果值为Float)。

我不确定,但您确定可以强制转换为基本体吗?@Logan不正确,请参见我的answer@wumm-我明白了,我删除了我的评论。我的回答是正确的。谢谢你的回答。不幸的是,我得到了同样的错误;)“任何都不能转换为浮动”您是否更改了解决方案?“\(值)”有效!我不想桥接到旧的NSObjects“(value)”可能会起作用,因为它不尝试转换为float。它可以将其解释为NSNumber,并能够使用其字符串表示形式以获取更多参考,请参阅
for (key, value: AnyObject) in contents {
    if value is Float {
        stringValue = "\(stringValue) \(value as NSNumber as Float) ,"
    }
}