class person
}person.age = 10
person.run()
//等價彙編**也是一樣的
person.self.age = 10
person.self.run()
//四個等價彙編**也是一樣的
var p0 = person() //init()
var p1 = person.self() //init()
var p2 = person.init() //init()
var p3 = person.self.init() //init()
func test(_ cls: anyclass) {}
test(person.self)元類型別
//1.自定義錯誤
//swift中可以通過error協議自定義執行時的錯誤資訊
enum someerror : error
//函式內部通過throw拋出自定義error,可能會丟擲error的函式必須加上throws宣告
func divide(_ num1: int, _ num2: int) throws -> int
return num1 / num2
}func test0() throws
func test1() throws
func test2() throws
//try test0()//1 3 5 //注釋掉這行test3才會執行
可以用do-catch捕捉error
func test3() catch let someerror.illegaarg(msg) catch let someerror.outofbounds(size,index) catch someerror.outofmemory catch
print("4")
}//test3()/*1
2引數異常: 0不能作為除數4*/
do catch let error
}//引數錯誤: 0不能作為除數
//3.處理error
//處理error的2中方式
//(1)通過do-catch捕捉error
//(2)不捕捉error,在當前函式增加throws宣告,error將自動拋給上層函式,如果最頂層函式(main函式)依然沒有捕捉error,那麼程式將終止
func test4() throws
//try test4()
/*引數錯誤: 0不能作為除數
1playground execution terminated: an error was thrown and was not caught:
▿ someerror
- illegaarg : "0不能作為除數"
*/func test5() throws catch let error as someerror
print("4")
}//try test5()
/*引數錯誤: 0不能作為除數12
illegaarg("0不能作為除數")4*/
//可以用try?、try!呼叫可能會丟擲error的函式,這樣就不用去處理error
func test6()
test6()
//變數a、b是等價的
var a = try? divide(20, 0)
var b: int?
do catch
print("------")
表明:函式本身不會丟擲錯誤,但呼叫閉包引數丟擲錯誤,那麼它會將錯誤向上拋
func exec(_ fn: (int, int) throws -> int, _ num1: int, _ num2: int) rethrows
//try exec(divide, 20, 0)
/*playground execution terminated: an error was thrown and was not caught:
▿ someerror
- illegaarg : "0不能作為除數"
*//*defer語句:用來定義以任何方式(拋錯誤、return等)離開**塊前必須要執行的**,defer語句將延遲至當前作用域結束之前執行
*/func open(_ filename: string) -> int
func close(_ file: int)
func processfile(_ filename: string) throws
//使用file
try divide(20, 0)
//close將會在這裡呼叫
}try processfile("test.txt")
/*open
close
playground execution terminated: an error was thrown and was not caught:
▿ someerror
- illegaarg : "0不能作為除數"
*/斷言
/*不符合指定條件就丟擲執行時錯誤,常用於除錯階段的條件判斷
預設情況下,swift的斷言只會在debug模式下生效,release模式下會忽略.
但增加swift flags修改斷言的預設行為:
-assert-config release:強制關閉斷言
-assert-config debug:強制開啟斷言
*/func div(_ v1: int, _ v2: int) -> int
//print(div(20, 0))
崩潰//如果遇到嚴重問題,希望結束執行程式時,可以直接使用fatalerror函式丟擲錯誤,這是無法通過do-catch捕捉的錯誤
func te(_ num: int) -> int
fatalerror("num 不能小於0") //使用了fatalerror就不需要寫return
}//te(-1)
//某些不得不實現、但不希望別人呼叫的方法,可以考慮內部使用fatalerror
class cat }
class tiger : cat
init(score: int) {}
}var t1 = tiger(score: 98)
//var t2 = tiger()
(十四)GORM 錯誤處理
下面介紹gorm關於錯誤的處理方式 如果在執行sql查詢的時候,出現錯誤,gorm 會將錯誤資訊儲存到 gorm.db 的error欄位,我們只要檢測error欄位就可以知道是否存在錯誤。if err db.where name tizi365 first user error err nil或者 ...
MySql錯誤處理 錯誤處理的例子
有幾種錯誤處理的宣告形式 如果任何錯誤 不是 not found 設定 l error 為 1 後繼續執行 declare continue handler for sqlexception set l error 1 如果發生任何錯誤 不是 not found 執行 rollback和產生一條錯誤...
MySql錯誤處理(三) 錯誤處理的例子
mysql錯誤處理 三 錯誤處理的例子 有幾種錯誤處理的宣告形式 如果任何錯誤 不是 not found 設定 l error 為 1 後繼續執行 declare continue handler for sqlexception set l error 1 如果發生任何錯誤 不是 not foun...