Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从另一个类读取/写入UITexTField_Ios_Swift - Fatal编程技术网

Ios 从另一个类读取/写入UITexTField

Ios 从另一个类读取/写入UITexTField,ios,swift,Ios,Swift,我有一个视图,其中有几个文本字段,我想从viewController中读取,验证,然后调用另一个文件中另一个类中的函数来写出结果 我知道我可以返回结果并从ViewController中写入,但有些函数(此处未显示)有太多的输入和输出字段,因此将它们传回似乎非常复杂。我该怎么做?我能做吗?(或者我只是想写一些非常糟糕的代码?) 这是我目前拥有的简化版本: MainViewController.swift: import UIKit class ViewController: UIViewCont

我有一个视图,其中有几个文本字段,我想从viewController中读取,验证,然后调用另一个文件中另一个类中的函数来写出结果

我知道我可以返回结果并从ViewController中写入,但有些函数(此处未显示)有太多的输入和输出字段,因此将它们传回似乎非常复杂。我该怎么做?我能做吗?(或者我只是想写一些非常糟糕的代码?)

这是我目前拥有的简化版本:

MainViewController.swift:

import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var fieldLength1: UITextField!  
    @IBOutlet weak var fieldLength2: UITextField!
    @IBOutlet weak var fieldLength3: UITextField!
    @IBOutlet weak var fieldLength4: UITextField!    
    @IBOutlet weak var fieldPerimeter: UITextField!    
    @IBOutlet weak var fieldArea: UITextField!    

    override viewDidLoad() {
        super.viewDidLoad()

        fieldLength1.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)
        fieldLength2.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)
        fieldLength3.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)
        fieldLength4.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)

    }

    @objc func textFieldDidChange() _ textField: UITextField) {
        if isValidEntry(textField: textField) {
            // Here is where I would like to call the function in the other class
            // Something like:
            // MathFunc().perimeter(
            // MathFunc().area
        }
    }

    func isValidEntry() {
        // ensure entries are only numbers and that enough info is present for calculations
    }
}
MathFunctions.swift:

import Foundation

class MathFunctions {
    func perimeter(l1: Double, l2:Double, l3:Double, l4:Double) -> Double {
        let p = l1 + l2 + l3 + l4    
        // Here is where I would like to write the result to the UITextField
        // Something like:
        // fieldPerimeter.text = p //with some formatting not shown here
    }

    func area(width: Double, length:Double) -> Double {
        let rectArea = width * length 
        // Here is where I would like to write the result to the UITextField
        // Something like:
        // fieldArea.text = rectArea //with some formatting not shown here
    }
}

将MathFunctions更改为struct,并将其函数更改为
static
。现在,您可以在任何地方说
MathFunctions.permiture()

将MathFunctions更改为结构,并将其函数更改为
静态。现在你可以在任何地方说
MathFunctions.Permiture()

首先,我认为
FieldPermiture
fieldArea
应该是标签,而不是文本字段。它们是输出,不是输入

其次,记住
区域(宽度:长度:)
返回结果。调用视图控制器中的函数,并将结果推送到字段中


视图控制器被认为是将值推入标签的东西。

首先,在我看来,
fieldpermiture
fieldArea
应该是标签,而不是文本字段。它们是输出,不是输入

其次,记住
区域(宽度:长度:)
返回结果。调用视图控制器中的函数,并将结果推送到字段中


视图控制器应该是将值推送到标签中的东西。

或者完全删除
MathFunctions
类型,并使这两个函数免费。这两个都很好,但这不是我要问的。我想知道如何从这些函数中写入字段,而不是从视图控制器中写入。或者干脆完全删除
MathFunctions
类型,并将这两个函数释放出来。这两个都很好,但这不是我要问的。我想知道如何从这些函数中写入字段,而不是从视图控制器中写入。我明白您的意思,但它们是字段-例如,另一个函数可能会反过来,使用面积和一个边来计算另一个边。但我认为你答案的第二部分确实澄清了这一点:我只是想写一些糟糕的代码。ViewController应该是将结果推送到显示器上的控制器,而不是函数。非常感谢。我明白你的意思,但它们是字段——例如,另一个函数可能会反过来,使用面积和一个边来计算另一个边。但我认为你答案的第二部分确实澄清了这一点:我只是想写一些糟糕的代码。ViewController应该是将结果推送到显示器上的控制器,而不是函数。非常感谢。