swift中“!”和“?”的区别?

图片描述
我在这里给roomid赋值不成功,改为“!”又报错!

图片描述
这里是可以的!

这是为什么!

阅读 3.6k
1 个回答

?! 都是对一种类型 Optional 操作的语法糖.

官方解释:

“ An optional value either contains a value or contains nil to indicate that a value is missing. Write a question mark (?) after the type of a value to mark the value as optional.”

大概意思是一个 Optional 类型, 可能有值, 也可能等于 nil。你可以使用 ? 去询问。

你也可以使用 ! 去强制解包, 但当 Optional 没有值时, 会 Crash。

一般来说你也可以这样, 去更安(ma)全(fan)的解包

if let value = someOptional { /* 有值, 返回 true */ 
    print("someOptional != nil")
} else { 
    print("someOptional == nil")
}

// 在 Swift 2.0 +, 可以使用 guard 关键字, 去更友好构造代码结构
guard let value = someOptional else { 
    print("someOptional == nil")
    return 
}
print("someOptional value is \(value)")

具体建议参考: Swift 可选值(Optional Values)介绍

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进