我已經用下面的函數拋出不退出功能:功能的投用執行特羅
func doSomething(_ myArray: [Int]) throws -> Int {
if myArray.count == 0 {
throw arrayErrors.empty
}
return myArray[0]
}
但是,當陣列等於0,它會拋出錯誤,但它會繼續執行功能返回空數組。
如何在轉到if語句時退出函數?
我已經用下面的函數拋出不退出功能:功能的投用執行特羅
func doSomething(_ myArray: [Int]) throws -> Int {
if myArray.count == 0 {
throw arrayErrors.empty
}
return myArray[0]
}
但是,當陣列等於0,它會拋出錯誤,但它會繼續執行功能返回空數組。
如何在轉到if語句時退出函數?
您需要了解錯誤處理。如果您插入throws
關鍵字,任何調用它的人都需要使用do-catch
語句,try?
,try!
或繼續傳播它們。那麼如果錯誤發生將會發生什麼取決於調用者。
下面是一個例子:
do {
try doSomething(foo)
} catch arrayErrors.empty {
fatalError("Array is empty!")
}
如果你想退出,一旦你到達if
,根本就沒有使用錯誤處理和呼叫fatalError
的,如果裏面的文件。
if myArray.count = 0 {
fatalError("Error happened")
}
該函數在您拋出錯誤時會返回。在操場上彈出並觀察輸出。
//: Playground - noun: a place where people can play
enum MyError: Error {
case emptyArray
}
func doSomething<T>(_ array: [T]) throws -> T {
guard !array.isEmpty else {
throw MyError.emptyArray
}
return array[0]
}
do {
let emptyArray: [Int] = []
let x = try doSomething(emptyArray)
print("x from emptyArray is \(x)")
} catch {
print("error calling doSeomthing on emptyArray: \(error)")
}
do {
let populatedArray = [1]
let x = try doSomething(populatedArray)
print("x from populatedArray is \(x)")
} catch {
print("error calling doSeomthing on emptyArray: \(error)")
}
你會看到輸出
error calling doSeomthing on emptyArray: emptyArray
x from populatedArray is 1
請注意,您沒有看到輸出print("x from emptyArray is \(x)")
,因爲它從來沒有所謂,因爲throw
結束該功能的執行。您也可以確認這一點,因爲guard
語句需要退出該功能。另外,要注意的是,如果你想從數組中獲得第一個東西,你可以使用myArray.first
,這將返回T?
,你可以處理這個零案例,而不必處理一個錯誤。例如:
//: Playground - noun: a place where people can play
let myArray = [1, 2, 3]
if let firstItem = myArray.first {
print("the first item in myArray is \(firstItem)")
} else {
print("myArray is empty")
}
let myEmptyArray: [Int] = []
if let firstItem = myEmptyArray.first {
print("the first item in myEmptyArray is \(firstItem)")
} else {
print("myEmptyArray is empty")
}
,輸出:
the first item in myArray is 1
myEmptyArray is empty
你所說的 「返回空數組」 是什麼意思?你的函數返回一個'Int'。 – Hamish
你在你的問題中所作的陳述不是真實的,其中大部分都沒有意義。當你說*「當數組等於0」*時,你的意思是「當數組爲空時」嗎?不,如果實際調用「throw」行,它將不會繼續到'return'行,並且不會返回任何內容。 – rmaddy