2016-02-04 65 views
0

我正在創建一個返回布爾值的函數。但斯威夫特顯示我的錯誤:iOS Swift:在顯示警告確認消息的函數中返回'Bool'

Missing return in a function expected to return 'Bool'

我的函數不直接返回一個「布爾」,它有一定的條件,比如,如果用戶點擊「確定」按鈕,那麼它應該返回true,如果「取消」,那麼返回false。有人可以告訴我如何解決這個問題?請看下面的代碼,供大家參考:

func showConfirmationAlert(title: String!, message: String!) -> Bool { 
    dispatch_async(dispatch_get_main_queue(), { 
     let alertController=UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert) 
     let okButton=UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default) { (okSelected) -> Void in 
      return true 
     } 
     let cancelButton=UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel) { (cancelSelected) -> Void in 
      return false 
     } 
     alertController.addAction(okButton) 
     alertController.addAction(cancelButton) 
     if self.presentedViewController == nil { 
      self.presentViewController(alertController, animated: true, completion: nil) 
     } 
    }) 
} 
+1

一些事情,你需要確保你的方法的所有退出路徑也有一個布爾值真/假明確return語句。注意到你的函數結束時你沒有返回語句 – Shripada

+0

因爲沒有任何條件可以讓我有返回語句。如果我在最後放置'return false',即使用戶點擊'OK',它也會一直返回false。 – laser2302

回答

4

想你想這樣

func showConfirmationAlert(title: String!, message: String!,success: (() -> Void)? , cancel: (() -> Void)?) { 
    dispatch_async(dispatch_get_main_queue(), { 
    let alertController = UIAlertController(title:title, 
    message: message, 
    preferredStyle: UIAlertControllerStyle.Alert) 

    let cancelLocalized = NSLocalizedString("cancelButton", tableName: "activity", comment:"") 
    let okLocalized = NSLocalizedString("viewDetails.button", tableName: "Localizable", comment:"") 

    let cancelAction: UIAlertAction = UIAlertAction(title: cancelLocalized, 
    style: .Cancel) { 
     action -> Void in cancel?() 
    } 
    let successAction: UIAlertAction = UIAlertAction(title: okLocalized, 
    style: .Default) { 
     action -> Void in success?() 
    } 
    alertController.addAction(cancelAction) 
    alertController.addAction(successAction) 

    self.presentViewController(alertController, animated: true, completion: nil) 
    }) 
} 
showConfirmationAlert("mytitle", message: "body", success: {() -> Void in 
    print("success") 
    }) {() -> Void in 
    print("user canceled") 
} 
+0

它的工作!非常感謝! – laser2302

0

return語句是一個封閉,這是dispatch_async部分內。將閉包看作是一個單獨的函數,因此很明顯這些陳述在該單獨的函數中,因此showConfirmationAlert沒有自己的聲明return

而不是裏面showConfirmationAlert,它應該包圍任何調用該函數。不過,你可能不得不處理你正在處理多個線程的事實。