【发布时间】:2014-10-27 15:58:26
【问题描述】:
我是 swift 新手,在理解如何使用 (!) 和 (?) 方面有些困难
据我所知,当存在变量可以为零的实例时,我们可以使用 (?)。 并在您 100% 确定该项目不为零时使用 (!)。
1.工作正常 - 可选
var john:String?
john = "Is my name"
println(john!)
2。运行时崩溃 - !不能为 nil - 表示这是正确的
var john:String?
println(john!)
3.工作正常
var dict: [String:AnyObject] = Dictionary()
dict["name"] = "John"
var str: String = dict["name"]! as String <--- Taking away the (!) says it's not convertible to String
4.无法运行/构建 - 对我来说类似于 1。
var dict: [String:AnyObject]? = Dictionary() ---error says does not have a member named 'subscript'
dict["name"] = "John"
var str: String = dict["name"]! as String
5.在展开可选值时意外发现 nil
var dict: [String:AnyObject] = Dictionary()
dict["name"]? = "John"
var str: String = dict["name"]! as String
如果有人能帮助我理解这些事情,那就太好了。谢谢!
【问题讨论】:
-
考虑到取消引用 nil
Object!会导致异常,我想要的不仅仅是“非常确定”! -
我已将非常确定更改为 100% 确定。是的,对于第二个,我知道它会根据(!)的定义而崩溃。但是说 5 哪里有?在字典中,为什么上面有 John 时会说 found nil?
-
@ShlbyPuerto,当
!“标记”一个 ivar 时认为 100% 不能是nil,这有点误导。有可能。你只能说,你得到了已经解包的值,所以你不需要再次强制解包——但它可以是nil,试试这个例子:var text: String! = "hello"; text = nil; println(text),它会为您打印nil。你的应用程序崩溃的原因是你强制解开一个可选的nil,这是无效的操作数。 -
@holex 是的,我明白这一点。谢谢。但我认为这篇文章对于我想要问的内容有点复杂。但这不是没有。 2(表示理解正确)。我在 4 和 5 上更复杂。其中 4 对我来说有点类似于 1,但我确定我错了,这就是我需要帮助的原因。 For 5 为什么当我分配给 John 时它是 nil?
-
@ShlbyPuerto,请参阅我关于 4 或 5 的回答,我个人没有看到它们有任何并发症,它们只是不正确。如果您还有其他问题,请告诉我。 :)
标签: ios string dictionary swift