如何在 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 块中,您必须使用 fatalError
、throw
或 return
.
停止当前代码的执行
guard let num = Int(text) else {
fatalError()
}
guard 语句的优点之一是下一行您可以使用已检查的变量,并且它的类型不是可选的。
guard let num = Int(text) else {
fatalError()
}
let next = num + 1
print(next)
看例子,num的类型是Int
,不是Int?
。这意味着如果守卫确实成功了,我就不需要关心解包了。
所以我想编写一个测试来断言 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 块中,您必须使用 fatalError
、throw
或 return
.
guard let num = Int(text) else {
fatalError()
}
guard 语句的优点之一是下一行您可以使用已检查的变量,并且它的类型不是可选的。
guard let num = Int(text) else {
fatalError()
}
let next = num + 1
print(next)
看例子,num的类型是Int
,不是Int?
。这意味着如果守卫确实成功了,我就不需要关心解包了。