我有Dictionary
String
和AnyObject
,所以[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)) + ","
不起作用。
有什么想法吗?
答案 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可以表示任何类类型的实例。
但是float
不是一个班级。您必须使用Any
代替:
除了函数类型之外,任何可以表示任何类型的实例。
这应该可行(但我无法在当前的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) ,"
}
}