如何将数据从视图控制器传递到swift中的数据模型

时间:2017-08-27 01:36:54

标签: swift

我正在构建一个与Web服务对话的简单应用程序。

我使用了delegates方法来传递数据(从我的模型到视图控制器)。

但我不知道如何从我的模型中的视图控制器(text_field.text)中读取数据。我需要这样做,以便我可以将正确的参数传递给我的webservice

我的视图控制器是:

import UIKit

class ViewController: UIViewController,HomeModelDelegate {
    var homeModel = HomeModel()

    @IBOutlet weak var loginid: UITextField!
    @IBOutlet weak var pwd: UITextField!

    @IBAction func submit(_ sender: UIButton) {

        homeModel.chkpwd()
        //Here viewcontroller is assigning itself to the homemodel's delegate property
        homeModel.delegate = self            
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        loginid.layer.cornerRadius=10
        pwd.layer.cornerRadius = 10
    }

    func itemsDownloaded(locations: [Location]) {
        loginid.text = locations[0].pwd
    }
}

我的型号代码是:

import UIKit

protocol HomeModelDelegate{
    func itemsDownloaded(locations:[Location])
}

class HomeModel: NSObject
{
    var delegate:HomeModelDelegate?

    func chkpwd()
    {
        //Hit the webservice url

        let x = ViewController()
        let z = x.loginid

        let serviceUrl = "http://www.xyz.in/webservice.php?loginid=(loginid.text)"

        //download the json data


        let url = URL(string: serviceUrl)

        if let url = url {

            let session = URLSession(configuration: .default)
            let task = session.dataTask(with: url, completionHandler:
            { (data, response, error) in

                if error == nil {

                //succeeded
                self.parseJson(data!)

                }
                else {
                //failed

                }
            })
        task.resume()

        }
    }

    func parseJson(_ data:Data){

        var locArray = [Location]()

        do{
        let jsonArray = try JSONSerialization.jsonObject(with: data, options: []) as! [Any]
            for jsonResult in jsonArray{

                let jsonDict = jsonResult as! [String:String]
                let loc = Location(pwd: jsonDict["loginid"]!, loginid: jsonDict["pwd"]!)

                locArray.append(loc)

                //pass the location back to the delegate

                delegate?.itemsDownloaded(locations: locArray)

            }
        }
        catch{
        print("An error occured")
        }
    }
}

1 个答案:

答案 0 :(得分:2)

请试试这个:

import UIKit

class ViewController: UIViewController,HomeModelDelegate {
var homeModel = HomeModel()

@IBOutlet weak var loginid: UITextField!

@IBOutlet weak var pwd: UITextField!

@IBAction func submit(_ sender: UIButton) {

    homeModel.z = loginid.text! // ASSIGNING z here
    homeModel.chkpwd()
    //Here viewcontroller is assigning itself to the homemodel's delegate property
    homeModel.delegate = self

}

override func viewDidLoad() {
    super.viewDidLoad()
    loginid.layer.cornerRadius=10
    pwd.layer.cornerRadius = 10

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func itemsDownloaded(locations: [Location]) {
    loginid.text = locations[0].pwd

}
}

型号:

import UIKit

protocol HomeModelDelegate{
    func itemsDownloaded(locations:[Location])
}

class HomeModel: NSObject
{
    var z:String = "" // INITIALIZING z
    var delegate:HomeModelDelegate?

    func chkpwd()
    {
        print(z) // CALLING z 
        //Hit the webservice url
        let serviceUrl = "http://www.xyz.in/webservice.php?loginid=(loginid.text)"

        //download the json data

        let url = URL(string: serviceUrl)
        if let url = url {
            let session = URLSession(configuration: .default)
            let task = session.dataTask(with: url, completionHandler:
                { (data, response, error) in
                    if error == nil {
                        //succeeded
                        self.parseJson(data!)
                    } else {
                        //failed
                    }
                })
            task.resume()
        }
    }

    func parseJson(_ data:Data){
        var locArray = [Location]()
        do{
            let jsonArray = try JSONSerialization.jsonObject(with: data, options: []) as! [Any]
            for jsonResult in jsonArray{
                let jsonDict = jsonResult as! [String:String]
                let loc = Location(pwd: jsonDict["loginid"]!, loginid: jsonDict["pwd"]!)
                locArray.append(loc)

                //pass the location back to the delegate
                delegate?.itemsDownloaded(locations: locArray)
            }
        } catch {
            print("An error occured")
        }
    }
}