Mor*_*iak 3 xcode ios swift xcode6
当我写这个:
// json is of type AnyObject
var status : String? = json.valueForKeyPath("status") as String?
Run Code Online (Sandbox Code Playgroud)
Xcode 在编译过程中似乎被无限循环阻塞:

我的代码有问题吗?
我做了一些测试,当我写道:
var status : String? = json.valueForKeyPath("status") as? String
Run Code Online (Sandbox Code Playgroud)
Xcode 能够编译,但是什么时候valueForKeyPath返回nil.
你的第二个版本是正确的。应该将可选值分配给可以返回 nil 的语句。这是该行的流程:
AnyObject!) 选项。这意味着它可以是 nil 或者它可以有一个值。StringString,则返回nilMaking status nil。如果它确实是一个非零String返回,status则返回任何字符串正如文档所说:
因为向下转换可能会失败,所以类型转换运算符有两种不同的形式。可选形式 as? 返回您尝试向下转换的类型的可选值。
摘自:Apple Inc. “The Swift Programming Language”。电子书。https://itun.es/au/jEUH0.l
这意味着当您编写 时as? String,返回值会自动为您包装在一个可选项中,因此由此产生的实际类型是String?,这是您想要的行为,因此您的第二个选项是正确的。
在您的第一个示例中,您试图将 返回的值valueForKeyPath(类型为AnyObject!(!意味着隐式解包))强制转换String?为显式包装的值,并且该值不会自动包装在您的可选项中,因此,由于这些类型不相同,它们之间的转换可能不起作用。
TL;DR:您的第一个选项实际上是不正确的(尽管它不应该使编译器崩溃,这是一个错误),而您的第二个选项是正确的并且可以执行您想要的操作。
| 归档时间: |
|
| 查看次数: |
7629 次 |
| 最近记录: |