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
由于swiftString
没有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) ,"
}
}