如何在 Swift 中将数据从一个模型传递到另一个模型?

埃兰凯宁

我正在处理一个包含“创建新帐户”视图控制器及其随附的名为“CreateNewAccount”的 Swift 类的项目。用户可以在这个视图控制器中放置 4 个输入值,名字、姓氏、用户名和密码。单击此 VC 中的“创建帐户”按钮后,4 个输入值将传递给一个名为 UserInfoRetrieveModel 的 Swift 类(我相信在 MVC 的模型层内),它们应该存储在那里。

然后我想将这些值传递给另一个名为 UserInfoModel 的 Swift 类(也是一个模型),然后它将第一个名称值委托给位于名为“ThanksForJoining”的 VC 中的 label 的文本值(及其随附的班级)。

我已经弄清楚如何将值从 VC 传递到模型(CreateNewAccount 到 UserInfoRetrieveModel)以及从模型到 VC(UserInfoModel 到ThanksForJoining),但是在我从模型到模型(UserInfoRetrieveModel 到 UserInfoModel)的转移中,最初输入到“CreateNewAccount, " 我想传递给第二个模型类 UserInfoModel 变为 nil。

下面是 CreateNewAccount、UserInfoRetrieve、UserInfo 和ThanksForJoining 的代码:

创建新帐户 ->

import UIKit

class CreateNewAccount: UIViewController{

@IBOutlet weak var FNInput: UITextField!
@IBOutlet weak var LNInput: UITextField!
@IBOutlet weak var usernameInput: UITextField!
@IBOutlet weak var passwordInput: UITextField!

var uInfoRetrieve = UInfoRetrieveModel()

@IBAction func thanksForJoining(_ sender: Any) {
    uInfoRetrieve.firstName = FNInput.text!
    uInfoRetrieve.lastName = LNInput.text!
    uInfoRetrieve.userName = usernameInput.text!
    uInfoRetrieve.password = passwordInput.text!
    uInfoRetrieve.delegate = self
    uInfoRetrieve.retrieving()
}
override func viewDidLoad() {
    super.viewDidLoad()
}

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

extension CreateNewAccount: UInfoRetrieveModelDelegate{
    func credentialTransfer(data: String) {
      print(data)
  }
}

用户信息检索 ->

import Foundation

protocol UInfoRetrieveModelDelegate: class {
  func credentialTransfer(data:String)
 }


class UInfoRetrieveModel: NSObject {

   weak var delegate: UInfoRetrieveModelDelegate?

     var firstName: String = ""
     var lastName: String = ""
     var userName: String = ""
     var password: String = ""

func retrieving(){


    delegate?.credentialTransfer(data: firstName)
    delegate?.credentialTransfer(data: lastName)
    delegate?.credentialTransfer(data: userName)
    delegate?.credentialTransfer(data: password)
    }

}

用户信息 ->

import Foundation

protocol UserInfoModelDelegate: class {
    func didReceiveDataUpdate(data: String)
   }

class UserInfoModel {
   weak var delegate: UserInfoModelDelegate?

   let uInfoRetrieve = UInfoRetrieveModel()

   func requestData() -> Array<String> {

    let firstName = uInfoRetrieve.firstName
    let lastName = uInfoRetrieve.lastName
    let userName = uInfoRetrieve.userName
    let password = uInfoRetrieve.password

    delegate?.didReceiveDataUpdate(data: firstName)
    delegate?.didReceiveDataUpdate(data: lastName)
    delegate?.didReceiveDataUpdate(data: userName)
    delegate?.didReceiveDataUpdate(data: password)
    let credentials = [firstName, lastName, userName, password] as [Any]
    return credentials as! Array<String>
  }
}  

感谢加入 ->

import UIKit

class ThanksForJoining: UIViewController {

   var userInfo = UserInfoModel()


  @IBOutlet weak var firstName: UILabel!

  override func viewDidLoad() {
    super.viewDidLoad()
    userInfo.delegate = self
    firstName.text = userInfo.requestData()[0]
    print("yo")
    print(userInfo.requestData()[0])
}

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

extension ThanksForJoining: UserInfoModelDelegate {

   func didReceiveDataUpdate(data: String) {
      print(data)
   }
}
法比安

UserInfoModelCreateNewAccount同时创建UInfoRetrieveModel. 您必须正确连接它们才能传递信息。

正确连接意味着(以最简单的形式)一个构建另一个并将自己设置为另一个的委托,因此UInfoRetrieveModel可以传递数据。子模型的构建通常通过computed property.

例子

struct Account {
    let firstName: String, lastName: String
    let userName: String, password: String
}

extension UInfoRetrieveModelDelegate: class {
    createAccount(_ account: Account): Bool
}

extension UserInfoModel: UInfoRetrieveModelDelegate{
    func createAccount(_ account: Account) -> Bool {
        // Handling creation of account.
        return success == true
    }
    var newUInfoRetrieveModel: UInfoRetrieveModel {
        let helperModel = UInfoRetrieveModel(parent: self)
        helperModel.delegate = self
        return helperModel
    }
}

解释

是的。您通常有一个Model,您的数据,然后有一些东西可以控制对它的访问以对您的模型进行更改,管理模型的存储方式,也许与云服务同步,这就是ModelController您在之间传递的内容ViewControllers,更多/其他controllers您通常使用 incase 使事情更简单。在您的情况下,您可能会将createAccount(调用)传递controller/viewController负责告诉modelController创建帐户然后告诉其中一个views/viewControllers显示模态/任何内容的 a 。

将数据传递到更高级别的常用方法是让viewController/controller一个它用来与更高级别通信的委托“负责ViewController/controller自己无法完成的操作”,例如将数据向上推(创建调用,修改调用,删除调用)如果没有意义给它 amodelController因为它不控制应用程序的那部分等。在你的情况下,你当然可以将 a 传递modelController给每个 little viewController/view,但通常更实用/更简单,只将它提供给一个控制部分,让其他人与当前控制部分进行通信controller/viewController

这里更详细的意思是你可能不想CreateAccountViewController显示成功对话框,而是另一个,CreateAccountViewController然后可以自己不显示,因为它不再在堆栈上。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Swift中将数据从一个表视图传递到另一个表视图?

来自分类Dev

如何将数据从一个视图控制器传递到另一个SWIFT

来自分类Dev

如何将数据从一个视图控制器传递到另一个SWIFT

来自分类Dev

如何在WatchOS 2和Swift中将变量从一个View Controller传递到另一个View Controller

来自分类Dev

如何在 Django 中将值从一个模型存储到另一个模型?

来自分类Dev

如何将值从一个 Viewcontroller 传递到另一个 struct swift

来自分类Dev

如何在敲除js中将值从一个视图模型传递到另一个视图模型?

来自分类Dev

如何在Swift中将数据从一个视图控制器移动到另一个视图控制器?

来自分类Dev

如何从一个模型到另一个模型存在id?

来自分类Dev

如何在Swift中将完成块传递给另一个类

来自分类Dev

如何在Android中将数据从一个应用程序传递到另一个

来自分类Dev

如何在 AngularJS 中将数据从一个视图传递到另一个视图

来自分类Dev

如何在python中将数据从一个文件传递到另一个文件?

来自分类Dev

如何在 Angular 5 中将服务数据从一个组件传递到另一个组件

来自分类Dev

如何在Java中将数据从一个json对象传递到另一个对象?

来自分类Dev

如何在 React 中将数据从单击的组件从一个路由传递到另一个路由?

来自分类Dev

如何在 AngularJS 中将数据从一个异步函数传递到另一个异步函数

来自分类Dev

在Swift中将ManagedObjectContext从一个ViewController传递到另一个ViewController?

来自分类Dev

在Swift中将列表从一个函数传递到另一个函数

来自分类Dev

在Swift中将列表从一个函数传递到另一个函数

来自分类Dev

如何在Django模型中将一个子类从一个类继承到另一个类

来自分类Dev

MacOS和Swift 3-如何将结果从一个过滤器传递到另一个

来自分类Dev

如何在Rails中将数据从一个模型/控制器发送到另一个模型/控制器

来自分类Dev

Swift 将数据从一个函数传递到另一个函数

来自分类Dev

如何将对象从一个组件传递到另一个组件以在angular2中建立数据模型?

来自分类Dev

如何在Mongo中将一个模型链接到另一个模型

来自分类Dev

如何将对象从一个模型复制到另一个模型

来自分类Dev

如何使用从一个模型到另一个模型的多个字段作为外键?

来自分类Dev

如何在Go中将服务指针从一个包传递到另一个包?

Related 相关文章

  1. 1

    如何在Swift中将数据从一个表视图传递到另一个表视图?

  2. 2

    如何将数据从一个视图控制器传递到另一个SWIFT

  3. 3

    如何将数据从一个视图控制器传递到另一个SWIFT

  4. 4

    如何在WatchOS 2和Swift中将变量从一个View Controller传递到另一个View Controller

  5. 5

    如何在 Django 中将值从一个模型存储到另一个模型?

  6. 6

    如何将值从一个 Viewcontroller 传递到另一个 struct swift

  7. 7

    如何在敲除js中将值从一个视图模型传递到另一个视图模型?

  8. 8

    如何在Swift中将数据从一个视图控制器移动到另一个视图控制器?

  9. 9

    如何从一个模型到另一个模型存在id?

  10. 10

    如何在Swift中将完成块传递给另一个类

  11. 11

    如何在Android中将数据从一个应用程序传递到另一个

  12. 12

    如何在 AngularJS 中将数据从一个视图传递到另一个视图

  13. 13

    如何在python中将数据从一个文件传递到另一个文件?

  14. 14

    如何在 Angular 5 中将服务数据从一个组件传递到另一个组件

  15. 15

    如何在Java中将数据从一个json对象传递到另一个对象?

  16. 16

    如何在 React 中将数据从单击的组件从一个路由传递到另一个路由?

  17. 17

    如何在 AngularJS 中将数据从一个异步函数传递到另一个异步函数

  18. 18

    在Swift中将ManagedObjectContext从一个ViewController传递到另一个ViewController?

  19. 19

    在Swift中将列表从一个函数传递到另一个函数

  20. 20

    在Swift中将列表从一个函数传递到另一个函数

  21. 21

    如何在Django模型中将一个子类从一个类继承到另一个类

  22. 22

    MacOS和Swift 3-如何将结果从一个过滤器传递到另一个

  23. 23

    如何在Rails中将数据从一个模型/控制器发送到另一个模型/控制器

  24. 24

    Swift 将数据从一个函数传递到另一个函数

  25. 25

    如何将对象从一个组件传递到另一个组件以在angular2中建立数据模型?

  26. 26

    如何在Mongo中将一个模型链接到另一个模型

  27. 27

    如何将对象从一个模型复制到另一个模型

  28. 28

    如何使用从一个模型到另一个模型的多个字段作为外键?

  29. 29

    如何在Go中将服务指针从一个包传递到另一个包?

热门标签

归档