你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 《從零開始學Swift》學習筆記(Day54)——拋出錯誤

《從零開始學Swift》學習筆記(Day54)——拋出錯誤

編輯:IOS開發綜合
   能放到try後面調用函數或方法都是有要求的,他們是有可能拋出錯誤,在這些函數或方法聲明的參數後面要加上throws關鍵字,表示這個函數或方法可以拋出錯誤。

    聲明拋出錯誤方法示例代碼如下:


//刪除Note記錄方法
func remove(model: Note)throws {
  ...
}
//查詢所有記錄數據方法
func findAll() throws-> [Note] {
    ...
}

    上述代碼remove(_:)方法沒有返回值,throws關鍵字放到參數後面。findAll()有返回值throws關鍵字放到參數和返回值類型之間。

在函數或方法中拋出錯誤
    一個函數或方法能夠聲明拋出錯誤,是因為在函數或方法中產生並拋出了錯誤,這樣函數或方法聲明拋出錯誤才有實際的意義。

   在產生並拋出錯誤方式:

   在函數或方法中通過throw語句,人為地拋出錯誤。

   在函數或方法中調用的其他可以拋出錯誤函數或方法,但是沒有捕獲處理,會導致錯誤被傳播出來。

   示例代碼如下:

//刪除Note方法
func remove(model: Note)throws {       
    
    guard let date = model.date else {        //判斷拋出時候是有了guard語句
        //拋出"主鍵為空"錯誤
        throw DAOError.PrimaryKeyNull     
    }
    //比較日期主鍵是否相等
    for (index, note) in listData.enumerate()where note.date == date {
        listData.removeAtIndex(index)
    }
}
 
//查詢所有數據方法
func findAll() throws-> [Note] {       
    
    guard listData.count > 0 else {           //判斷拋出時候是有了guard語句
        //拋出"沒有數據"錯誤。
        throw DAOError.NoData         
    }
    return listData
}
 
func printNotes() throws {               //聲明拋出錯誤
    
    let datas = try findAll()       
    for note in datas {
        print("date : \(note.date!) -content: \(note.content!)")
    }
}
try printNotes()

             
    guard語句最擅長處理這種早期判斷,條件為false情況下拋出錯誤。

    findAll()語句本身有可能產生錯誤,但是並沒有使用catch語句捕獲並處理,這樣就導致了這個錯誤傳播給該函數或方法的調用者,如果它的調用者也都不捕獲處理,那麼最後程序會出現運行期錯誤。
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved