2017-03-21 188 views
-1

我有一個協議自定義協議斯威夫特

import UIKit 
import Alamofire 
import SwiftyJSON 

protocol RequestProtocol: class { 
    func RequestConnection(json: JSON, status: Int, Message: String) 
} 

class API: UIViewController { 

    var delegate: RequestProtocol? 
    var json: JSON = [] 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    func RequestConnection() { 
     Alamofire.request(variablesClass.url).responseJSON { (response) -> Void in 
      switch response.result { 
      case .success: 
       let result = response.result.value 
       if response.response?.statusCode == 200 { 
        self.json = JSON(result!) 
        DispatchQueue.main.async(execute: { 
         self.delegate?.RequestConnection(json: self.json, status: (response.response?.statusCode)!, Message: "\(self.json["Message"])") 
        }) 
       } else { 
        self.json = JSON(result!) 
        DispatchQueue.main.async(execute: { 
         self.delegate?.RequestConnection(json: self.json, status: (response.response?.statusCode)!, Message: "\(self.json["Message"])") 
        }) 
       } 
       break; 
      case .failure(let error): 
       print(error) 
       break; 
      } 
     } 
    } 
} 

我有它在我的主視圖

class ViewController: UIViewController, RequestProtocol { 

    func RequestConnection(json: JSON, status: Int, Message: String) { 


     func showAlertView() 
    } 

    override func viewDidLoad() { 
      super.viewDidLoad() 
      var senderDelegateRequest = API() 

      var receiverDelegateViewController = ViewController() 


      senderDelegateRequest.delegate = receiverDelegateRequestRegistro 
      senderDelegateRequest.RequestConnection() 
    } 


func showAlertView(){ 
     let alertView = UIAlertController(title: "You need to log in first", message: "To access the special features of the app you need to log in first.", preferredStyle: .alert) 
     alertView.addAction(UIAlertAction(title: "Login", style: .default, handler: { (alertAction) -> Void in 

     })) 
     alertView.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil)) 
     present(alertView, animated: true, completion: nil) 
    } 

爲什麼議定書一點兒也不執行函數來顯示警報調用。

有一些方法,一旦在執行協議可以執行某些功能

+1

僅供參考 - 「API」是視圖控制器子類的可怕名稱。 – rmaddy

+0

'RegistroController'是什麼,爲什麼你設置委託給它而不是'self'?爲什麼'API'繼承'UIViewController'? – JuicyFruit

+0

您必須將委託設置爲採用幾乎所有情況下都是「self」的協議的類。並且認爲'receiverDelegateRequestRegistro'最有可能是**而不是故事板中的控制器實例。 – vadian

回答

0

在你ViewController類你符合協議RequestProtocol。這意味着您可以成爲API的代表。您創建了一個名爲receiverDelegateViewController的實例,但此實例尚未加載。你應該改變:

senderDelegateRequest.delegate = receiverDelegateRequestRegistro 

senderDelegateRequest.delegate = self 

而且在API委託應該叫RequestConnection,而不是你ViewController

+0

它的工作,非常感謝。 – Brian