Pet*_*haw 45 macos xcode swift
有没有办法在迅速否定"如果让"?这看起来很愚蠢:
if let type = json.type {
} else {
XCTFail("There is no type in the root element")
}
Run Code Online (Sandbox Code Playgroud)
我不能使用XCTAssertNotNil,因为json.type是一个枚举.
enum JSONDataTypes {
case Object
case Array
case Number
case String
}
Run Code Online (Sandbox Code Playgroud)
非常感谢
编辑:这是一个:
var type: JSONDataTypes? = nil
Run Code Online (Sandbox Code Playgroud)
ric*_*ter 40
Swift 2.0(Xcode 7)和更高版本都有新的guard语句,类似于"if not let" - 你可以有条件地将一个变量绑定到封闭范围的其余部分,保持代码中的"良好路径"至少缩进.
guard let type = json.type else {
XCTFail("There is no type in the root element")
}
// do something with `type` here
Run Code Online (Sandbox Code Playgroud)
对此的要求是必须退出该范围的else子句guard(因为否则您将在该子句之后进入代码,其中受保护的变量(type如上所述)是未绑定的).所以它的东西就这样结束return,break,continue或者是编译器知道的一个函数永不返回(即注解@noreturn,就像abort()......我不记得不加思索如果包括XCTFail,但它应该(提交错误,如果它是不).
有关详细信息,请参阅Swift编程语言中的Early Exit.
至于真实的东西......在Swift 1.x中没有否定的if-let形式.但是既然你正在使用XCTest,你可以只测试断言表达式的可选部分:
XCTAssert(json.type != nil, "There is no type in the root element")
Run Code Online (Sandbox Code Playgroud)
Abh*_*ert 24
这是你如何做到的:
if json.type == nil {
// fail
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16865 次 |
| 最近记录: |