歴史における迅速な例外処理
- NSErrorのSwift1.0ココアタッチのバージョンは、スウィフトは本当に独自の例外処理メカニズムを持っていません
- Swift2.0バージョンはERRORTYPEプロトコルを追加しました
- Swift3.0バージョンと改名エラープロトコル
Swift3.0エラープロトコルの使用
まず、列挙された、統合プロトコルエラーの定義は(スウィフト2.0プロトコルは、3.0名前を変更したプロトコルエラー、ERRORTYPEと呼ばれています)
1
2
3
4
5
|
列挙型
MyError:エラー{
ケース
1
ケース
2
ケース
3
}
|
スロー使用して投げます
:スローされた例外を示す方法で使用されるパラメータリスト、標準フォーマットバックスローするfunc 方法名字 (参数列表) throws -> 返回值类型
方法でスロースローを使用して
1
2
3
4
5
6
7
8
9
10
11
12
|
FUNC testFunc(STR:String)をスロー - >文字列{
もし
strの==
"1"
{
MyError.oneを投げます
} そうなら STR ==
"2" {
スローMyError.two
} そうなら STR ==
"三" {
MyError.threeを投げます
}
リターン
「OK」
}
|
DO-キャッチハンドルの例外を使用します
1
2
3
4
5
6
7
8
9
|
やります
{
VAR STR = testFunc(STR:試みる"3"を)
}キャッチMyError.one {
印刷("MyError.one" )
}キャッチMyError.two {
印刷("MyError.two" )
} catch let error as MyError {
print(error)
}
|
try?的使用
Swift2.0 后加入了新的关键字 try?
, 如果不想处理异常那么可以用这个关键字,使用这个关键字返回一个可选值类型,如果有异常出现,返回nil.如果没有异常,则返回可选值.例子如下
1
2
3
4
5
|
enum MyError : Error {
case one
case two
case three
}
func testFunc(str: String) throws -> String {
if str ==
"one" {
throw MyError.one
}
else
if str ==
"two" {
throw MyError.two
}
else
if str ==
"three" {
throw MyError.three
}
return
"ok"
}
var str = try? testFunc(str:
"three")
print(str)
|
控制台输出
`nil
Program ended with exit code: 0`
try!的使用
如果不想处理异常,而且不想让异常继续传播下去,可以使用try!.这有点儿类似NSAssert().但是一旦使用try!后,在可能抛出异常的方法中抛出了异常,那么程序会立刻停止.例子如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
enum MyError : Error {
case one
case two
case three
}
func testFunc(str: String) throws -> String {
if str ==
"one" {
throw MyError.one
}
else
if str ==
"two" {
throw MyError.two
}
else
if str ==
"three" {
throw MyError.three
}
return
"ok"
}
var str = try! testFunc(str:
"three")
|
控制台:程序奔溃掉~
try try? try! 的区别
- try 出现异常处理异常
- ?しようと、異常はnilを返す例外、オプションの戻り値の型を処理できません
- 試してみてください!プログラムが異常、同様のNSAssertを停止するよう表示されたら、異常は、普及していき防ぎます()