基本上,我想要UIViewController的textfield的值,然后用它来做一个if-else语句。
我将循环遍历字典,如果(字典的)值大于和/或等于用户输入,我将通过tableview显示键。
我在加载应用时显示了一个警告框。我创建了一个函数,然后在viewDidLoad()函数下调用它。这可以在这里看到:
@Test
public void testFluxOrMono() {
Flux<String> source = Flux.just(2, 3);
List<Integer> result = source
.flatMap(i -> multiplyBy2Async(i))
.collectList()
.block();
// run your asserts on the list. Reminder: the order may not be what you expect because of the `flatMap`
// Or with a Mono:
Integer resultOfMono = Mono.just(5)
.flatMap(i -> multiplyBy2Async(i))
.map(i -> i * 4)
.block();
// run your asserts on the integer
}
这是我的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)
}
如您所见,我实际上在DataController类中执行了get / set方法。这样我可以设置值,然后在以后的方法中获取值。我已经习惯了,但似乎根本没有保存我的价值观。我还尝试创建一个全局变量,然后将textfield的值存储到该变量中。
即。
override func viewDidLoad() {
super.viewDidLoad()
alertBox()
}
然后在alertBox()函数中:
var textOfTF : Double = 0.0
以下是我的DataController类中的get / set函数:
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())
*/
}
当我执行 alert.addAction 方法(就是这个)时,它设法保存了:
var userInput : Double = 0.0
func getUserInput() -> Double{
return userInput
}
func setUserInput(userI: Double){
userInput = userI
return
}
但是在那个方法之外打印只是打印了 0.0 值。
我的代码有什么问题吗?请指教。
P.S。 self.dc.setUserInput(..)中的dc是我声明DataController类的变量。
在TableViewController类中:
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())
}
}))
在DataController类中:
var dc = DataController.sharedInstance
答案 0 :(得分:0)
您可以轻松地为用户GPA值定义静态全局值,如下所示:
struct defaultsKeys {
static var userGPA:Double = 0.0
}
之后,您可以在警告框中的textField值中设置此值:
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
答案 1 :(得分:0)
我设法解决了这个问题。是的,我一直将它保存到DataController但没有单例方法。因此,使用单例方法来保存和检索数据。
即
static var sharedInstance = DataController {
private init()
}
存储在变量中:
var value : Double = 0.0
在TableViewController中,调用:
Datacontroller.sharedInstance.value
感谢kkakkurt帮助我,但这很简单。我不知道我是如何忽视它的。