我有一个代码:
var i : AnyObject!
i = 10
println(i as String)
println(i.stringValue)
它会在
as String
行崩溃但在第二个i.stringValue
中运行。
以上几行中String
和stringValue
之间的区别是什么?
答案 0 :(得分:9)
.stringValue
是一种将Integer提取为字符串值的方法,但as String
不适用于此而如果您使用as String
,则Xcode会强制您添加!
as
这是不好的,它永远不会成功,它会使你的应用程序崩溃。你无法将Int
投射到String
。它总是会失败。这就是为什么当你as! String
它崩溃应用程序时。
所以铸造在这里不是一个好主意。
以下是将Integer提取为字符串值的更多方法:
let i : Int = 5 // 5
let firstWay = i.description // "5"
let anotherWay = "\(i)" // "5"
let thirdWay = String(i) // "5"
此处您无法使用let forthway = i.stringValue
,因为Int没有名为stringValue
的成员
但您可以使用anyObject
做同样的事情,如下所示:
let i : AnyObject = 5 // 5
let firstWay = i.description // "5"
let anotherWay = "\(i)" // "5"
let thirdWay = String(i) // "5"
let forthway = i.stringValue // "5" // now this will work.
答案 1 :(得分:1)
两者都将Int转换为String,但这将不再起作用。 在Swift 2中,不可能这样做。
你应该使用:
let i = 5
print(String(format: "%i", i))
这将特别将int值写为String
答案 2 :(得分:1)
使用as String
,您无法转换值,但您定义该变量包含String
,但在您的情况下它是Int
。因此它会崩溃。
而i.stringValue
的另一种方式将你的价值投入String
。所以它不会给你任何崩溃并成功转换为字符串值。
注意:当你使用
AnyObject
时,变量有成员stringvalue
...但是Int没有...要转换Int值检查@Dharmesh Kheni回答