swift中“as string”和“stringvalue”有什么区别?

时间:2015-09-29 06:25:22

标签: ios string swift typecasting-operator

我有一个代码:

var i : AnyObject!
i = 10
println(i as String)
println(i.stringValue)
  

它会在as String行崩溃但在第二个i.stringValue中运行。

以上几行中StringstringValue之间的区别是什么?

3 个答案:

答案 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回答