默认返回值的Swift生成错误
下面的代码示例很好地说明了我的目的。我有一个函数,它应该返回给定的类型。它是基于一个不完整的开关来实现的。但是如果达到默认返回值的Swift生成错误,swift,switch-statement,swift2,Swift,Switch Statement,Swift2,下面的代码示例很好地说明了我的目的。我有一个函数,它应该返回给定的类型。它是基于一个不完整的开关来实现的。但是如果达到默认值情况,我希望只生成一个错误。而不是返回某人选择的可选然后在该点死亡 func someFunc(value:UInt8) -> SomeType { switch value { case 0x00: return SomeType.foo() case 0x13: return SomeType.bar()
默认值
情况,我希望只生成一个错误。而不是返回某人选择的可选代码>然后在该点死亡
func someFunc(value:UInt8) -> SomeType {
switch value {
case 0x00:
return SomeType.foo()
case 0x13:
return SomeType.bar()
default:
break // BUT I WANT AN ERROR HERE
}
}
}
这就是我将如何实现错误。如果您希望程序在默认情况下终止
(因为默认情况将指示编程错误),
使用fatalError()
:
fatalError()
导致程序立即终止
带有如下错误消息
fatal error: Unexpected value 99: file main.swift, line 13
致命错误:意外值99:file main.swift,第13行
fatalError()
函数标记为@noreturn
(分别为
Swift 3中的返回类型Never
),
因此,编译器不会对丢失的案例或丢失的数据进行投诉
返回值
与类似的函数(如assert()
或assertionFailure()
)相比,
fatalError()
永远不会“优化”,而是在调试、优化和未检查的版本中对其进行评估。如果要完全停止执行,可以使用fatalError()
。
struct SomeType {
static func foo() -> SomeType {
print("foo")
return SomeType()
}
static func bar() -> SomeType {
print("bar")
return SomeType()
}
}
struct E: ErrorType {}
func someFunc(value:UInt8) throws -> SomeType {
switch value {
case 0x00:
return SomeType.foo()
case 0x13:
return SomeType.bar()
default:
throw E()
}
}
do {
try someFunc(100)
} catch {
print("error")
}
// prints
// error
fatal error: Unexpected value 99: file main.swift, line 13
struct SomeType {
static func foo() -> SomeType {
print("foo")
return SomeType()
}
static func bar() -> SomeType {
print("bar")
return SomeType()
}
}
struct E: ErrorType {}
func someFunc(value:UInt8) throws -> SomeType {
switch value {
case 0x00:
return SomeType.foo()
case 0x13:
return SomeType.bar()
default:
throw E()
}
}
do {
try someFunc(100)
} catch {
print("error")
}
// prints
// error