ios - 将引用存储在变量SWIFT 4中

原文 标签 ios swift swift4 inout

我将参数从viewController发送到customCell。我的自定义单元格具有textField。在我的viewController中,我有一个字符串变量,用于将值存储在textField中,因为该值将发送给rest服务。

MyCustomCell

customCell: TableViewCell: {
 var data: String?
 @IBOutlet weak var textField: UITextField!

 override func awakeFromNib() {
  super.awakeFromNib()
  textField.delegate = self
 }

 func setData(data: inout String) {
  self.data = data
 }
}

extension customCell: UITextFieldDelegate {
 func textFieldDidEndEditing(_ textField: UITextField) {
  data = textField.text ?? ""
 }
}

MyViewController
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
 let cell = tableView.dequeueReusableCell(withIdentifier: "customCell", for: indexPath) as! customCell
  cell.setData(data: &data.email)
  return cell
}

当我将引用发送到customCell时,我在textFieldDidEndEditing方法中丢失了该引用。

最佳答案

不要那样做

使用class创建数据模型。类是引用类型

class Model {

    var name : String   
    var email : String

    init(name: String, email: String) {
        self.name = name
        self.email = email
    }
}

声明数据源数组
var models = [Model]()

在单元格中声明模型的属性(通过类名以大写字母开头的方式)
class CustomCell: TableViewCell {

    @IBOutlet weak var textField: UITextField!

    var model: Model! {
       didSet {
          textField.text = model.email
       }
    }

    override func awakeFromNib() {
       super.awakeFromNib()
       textField.delegate = self
    }
}


extension CustomCell: UITextFieldDelegate {
    func textFieldDidEndEditing(_ textField: UITextField) {
        model.email = textField.text ?? ""
    }
}

在cellForRow中将模型传递到单元格
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
     let cell = tableView.dequeueReusableCell(withIdentifier: "customCell", for: indexPath) as! CustomCell
     cell.model = models[indexPath.row]
     return cell
}

由于参考语义,模型中的值得以保留。

关于ios - 将引用存储在变量SWIFT 4中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49656660/

相关文章:

ios - 如何使用oauth发送https GET请求

ios - 如何以编程方式获取UIVIewController的IBOutlet列表

ios - Stripe -STPPaymentCardTextField-如何删除或隐藏CVC代码字段?

ios - 如何在swift项目中隐藏与导航 Controller 相连的所有 View Controller 的页脚?

ios - Metal 中的片段着色器和顶点着色器

ios - 异步请求后在appdelegate中选择RootViewController

ios - Swift 4访问completionhandler从类变量返回值

ios - 如何删除父 View 而不是 subview 的模糊 View ?

ios - Realm 。更新多个ViewController中的数据

ios - sleep 命令不起作用