Ios 如何获取UIAlertController的textfield值并在其他函数中使用它?(Swift 3)

Ios 如何获取UIAlertController的textfield值并在其他函数中使用它?(Swift 3),ios,uitableview,swift3,uitextfield,uialertcontroller,Ios,Uitableview,Swift3,Uitextfield,Uialertcontroller,基本上,我需要UIViewController的textfield的值,然后使用它来执行if-else语句 我将在字典中循环,如果(字典的)值大于和/或等于用户输入,我将通过tableview显示键 我做了一个警报框,在加载应用程序时显示。我创建了一个函数,然后在viewDidLoad()函数下调用它。这可以在这里看到: func alertBox(){ // create String objects for the title and the message let ti

基本上,我需要UIViewController的textfield的值,然后使用它来执行if-else语句

我将在字典中循环,如果(字典的)值大于和/或等于用户输入,我将通过tableview显示键

我做了一个警报框,在加载应用程序时显示。我创建了一个函数,然后在viewDidLoad()函数下调用它。这可以在这里看到:

 func alertBox(){

    // create String objects for the title and the message
    let title = "Enter your GPA"
    let message = "With your help, we can list courses you are most likely eligible for based on the GPA you provide to us."

    // create a UIAlertController object
    let alert = UIAlertController(title: title,
                                  message: message,
                                  preferredStyle: UIAlertControllerStyle.alert)


    // create a UIAlertAction object

    //2. Add the text field. You can configure it however you need.
    alert.addTextField { (textField) in
        textField.text = ""
    }

    // 3. Grab the value from the text field, and print it when the user clicks OK.
    alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { [weak alert] (_) in
        let textField = alert?.textFields![0] // Force unwrapping because we know it exists.
        if let textAlert = textField?.text {
            print("Text field: \(textAlert)")
            let item = Double(textAlert)
            print(item!)
            let unwrappedvalue = item!
            self.dc.setUserInput(userI: unwrappedvalue)
            print(self.dc.getUserInput())


        }
    }))


    // add the UIAlertAction object to the UIAlertController object
    let cancelAction = UIAlertAction(title: "Cancel",
                                     style: .cancel,
                                     handler: nil)
    alert.addAction(cancelAction)

    // display the UIAlertController object
    present(alert, animated: true, completion: nil)
}
下面是我的viewDidLoad()函数:

    override func viewDidLoad() {
    super.viewDidLoad()
    alertBox()     
}
            if let textAlert = textField?.text {
            print("Text field: \(textAlert)")
            let item = Double(textAlert)
            print(item!)
            self.textOfTF = item!
            /*
            self.dc.setUserInput(userI: unwrappedvalue)
            print(self.dc.getUserInput())
            */

        }
如您所见,我实际上在DataController类中执行了一个get/set方法。这样,我可以设置值,然后在以后的方法中获取值。我用过它,但它似乎根本不能保存我的价值观。我还尝试创建一个全局变量,然后将textfield的值存储到该变量中

i、 e

然后在后面的alertBox()函数中:

    override func viewDidLoad() {
    super.viewDidLoad()
    alertBox()     
}
            if let textAlert = textField?.text {
            print("Text field: \(textAlert)")
            let item = Double(textAlert)
            print(item!)
            self.textOfTF = item!
            /*
            self.dc.setUserInput(userI: unwrappedvalue)
            print(self.dc.getUserInput())
            */

        }
以下是我的DataController类中的get/set函数:

var userInput : Double = 0.0
func getUserInput() -> Double{
    return userInput
}
func setUserInput(userI: Double){
    userInput = userI
    return
}
var dc = DataController.sharedInstance
static var sharedInstance = DataController()
当我执行alert.addAction方法时,它成功地保存了(如下所示):

但是,在该方法之外打印时,只向我打印了一个0.0

我的代码有什么错误吗?请告知

self.dc.setUserInput(..)中的p.S.dc是一个变量,我在其中声明了DataController类

在TableViewController类中:

var userInput : Double = 0.0
func getUserInput() -> Double{
    return userInput
}
func setUserInput(userI: Double){
    userInput = userI
    return
}
var dc = DataController.sharedInstance
static var sharedInstance = DataController()
在DataController类中:

var userInput : Double = 0.0
func getUserInput() -> Double{
    return userInput
}
func setUserInput(userI: Double){
    userInput = userI
    return
}
var dc = DataController.sharedInstance
static var sharedInstance = DataController()

您可以轻松地为用户GPA值定义静态全局值,如下所示:

struct defaultsKeys {
        static var userGPA:Double = 0.0
    }
之后,您可以从警报框中的文本字段值设置此值:

alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { [weak alert] (_) in
    let textField = alert?.textFields![0] // Force unwrapping because we know it exists.
    if let textAlert = textField?.text {
        print("Text field: \(textAlert)")
        defaultsKeys.userGPA = Double(textAlert)!
    }
您可以通过调用在每个视图控制器中使用此
userGPA
值:

defaultsKeys.userGPA

我已经设法解决了。是的,我一直在将其保存到DataController,但没有使用singleton方法。因此,请使用singleton方法保存和检索数据

i、 e

存储在变量中:

var value : Double = 0.0
在TableViewController中,调用:

Datacontroller.sharedInstance.value

感谢kkakkurt帮了我的忙,但这真的很简单。我不知道我怎么会忽视它

测试了它,它给了我相同的结果,但仍然无法存储。也许您可以在下面的示例中查看静态全局变量用法的一般视图: