强制解包可选不会崩溃。为什么不呢?

时间:2018-04-26 22:37:05

标签: swift

这是用户模型

class User: NSObject, NSCoding {
    var userID: String!
    var username: String!
    var password: String!
    var token: String!

    override init() {
    }
}

var user: User?
user.password = pass
user.username = "foo"
user.userID = "bar"

当我创建user时,我没有设置token属性。然后我尝试访问下面示例中的token。我的理解是这种访问token的方式只是检查user是否为零但不检查token是否为零。

user?.token

我认为这会根据我如何将属性设置为隐式解包的选项而崩溃?

2 个答案:

答案 0 :(得分:0)

通常不会崩溃,因为变量user尚未初始化。 user?.token看到用户为零,因此结果为零。这称为可选链接。您可以阅读更多here。 如果您希望它崩溃,在尝试访问令牌字段之前,您应该init User个对象。

答案 1 :(得分:0)

你没有强行打开任何东西。您已将token声明为隐式解包,但这并不意味着它被迫解包。可以使用隐式解包的可选项来执行某些操作,例如检查它是否为nil而不打开nil值并崩溃。即使if user!.token == nil声明为tokentools:co0-ntext=".MainActivity" 之类的内容也很好。