如何在 Swift 中断言对象实例化?

How do I assert object instantiation in Swift?

所以我想编写一个测试来断言 class 的一个实例已经创建。我最初的反应是编写一个测试来检查接收 class 的变量是否为空,但有人指出这在 Swift 中不起作用,因为可选值,如果我打开程序会崩溃包含 null.

的东西

那么如何测试 class 或与此相关的任何对象是否已正确创建?

我在 Xcode 7.

中使用 Swift 2.2

如果不赞成,请告诉我问题或格式有什么问题。

if let 是 Swift 做这种事情的方法:

if let object = MyObject.init() {
    //the object exists
} else {
    //the object is nil
}

如果您在 XCTest 的上下文中谈论,如果您想测试以确保它已被实例化,您可以这样做:

func testMyObjectInstantiation() {
    let object = MyObject(value: 42)
    XCTAssert(object != nil, "instantiation failed")
}

或者

func testMyObjectInstantiation() {
    let object = MyObject(value: 42)
    XCTAssertNotNil(object, "instantiation failed")
}

最好的解决方案是 guard 语句

后卫

使用 guard let 语句你可以检查一个值不为 nil,否则 else 块 si 被执行。在 else 块中,您必须使用 fatalErrorthrowreturn.

停止当前代码的执行
guard let num = Int(text) else {
    fatalError()
}

guard 语句的优点之一是下一行您可以使用已检查的变量,并且它的类型不是可选的。

guard let num = Int(text) else {
    fatalError()
}

let next = num + 1
print(next)

看例子,num的类型是Int,不是Int?。这意味着如果守卫确实成功了,我就不需要关心解包了。