Я пытаюсь представить Alertcontroller, который запрашивает у пользователя имя файла, а затем использует имя файла в другом месте программы. Я пробовал множество вариантов следующего кода:
import UIKit
class ViewController: UIViewController {
var shortName: String!
@IBAction func saveFile(sender: AnyObject) {
//request filename with alert
var alertController:UIAlertController?
alertController = UIAlertController(title: "Enter File",
message: "Enter file name below",
preferredStyle: .Alert)
alertController!.addTextFieldWithConfigurationHandler(
{(textField: UITextField!) in
textField.placeholder = ""
})
let action = UIAlertAction(title: "Submit",
style: UIAlertActionStyle.Default,
handler: {[weak self]
(paramAction:UIAlertAction!) in
if let textFields = alertController?.textFields{
let theTextFields = textFields as [UITextField]
let enteredText = theTextFields[0].text
self!.shortName = enteredText //trying to get text into shortName
print(self!.shortName) // prints
}
})
alertController?.addAction(action)
self.presentViewController(alertController!,
animated: true,
completion: nil)
//do some stuff with the input
print(shortName) //THIS RETURNS nil if uncommented. comment out to avoid crash
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
Я тщательно исследовал это и не могу найти, как:
получить строковое значение shortName из замыкания UIAlertAction и в короткое имя (я знаю, что текущий «self!.shortName» недоступен вне замыкания — не имеет значения, какое имя я использую — не могу его получить)
Если вы запустите программу «как есть», строка print(shortName) вызовет сбой из-за разворачивания nil. Как я могу получить предупреждение «ждать» ввода?
Большинство опубликованных «решений» имеют одну и ту же проблему — они на самом деле не получают текстовый ввод из замыкания в переменную, к которой может получить доступ остальная часть программы.
Благодарность