Swift:如何使用textfield和textview验证正确编写UIAlertAction?

Swift:如何使用textfield和textview验证正确编写UIAlertAction?,swift,uialertviewcontroller,Swift,Uialertviewcontroller,我正在创建一个应用程序,其中一个选项卡是一个留言簿,用户可以在其中写一些东西。我使用UIAlertController弹出一个窗口,其中包含一个用于输入姓名的文本字段和一个用于输入消息的文本视图。我想在默认情况下禁用“Post”按钮,然后在名称字段至少包含2个字符且消息至少包含3个字符后启用它。我通过以下方式实现了这一目标: #1:在顶部声明“Post”UIAlertAction let saveAction = UIAlertAction(title:"Post", sty

我正在创建一个应用程序,其中一个选项卡是一个留言簿,用户可以在其中写一些东西。我使用UIAlertController弹出一个窗口,其中包含一个用于输入姓名的文本字段和一个用于输入消息的文本视图。我想在默认情况下禁用“Post”按钮,然后在名称字段至少包含2个字符且消息至少包含3个字符后启用它。我通过以下方式实现了这一目标:

#1:在顶部声明“Post”UIAlertAction

let saveAction = UIAlertAction(title:"Post", style: .default, handler: { (action) -> Void in print(data) })
上行给出了错误(无法在属性初始值设定项中使用实例成员“data”;属性初始值设定项在self可用之前运行。)

#2:在警报中添加此“Post”按钮并将其禁用

alert.addAction(saveAction)
saveAction.isEnabled = false
#3增加两个功能来检测textfield和textview中的单词数量,如果它们满足要求,则启用“Post”按钮

理想的情况是,当满足要求并且用户单击“发布”按钮时,我将获取数据[“名称”]和数据[“内容”],并将其插入数据库。现在,我已经让它工作到满足要求后启用“Post”按钮的程度,但是当尝试获取数据时,它会给出错误“不能在属性初始值设定项中使用实例成员“data”;属性初始值设定项在self可用之前运行”

你能告诉我如何解决这个问题吗?谢谢


所以这就是我要做的

在viewDidLoad()之外将UIAlertAction引用更改为此

在viewDidLoad()中,您可以像这样实例化它:

saveAction = UIAlertAction(title:"Post", style: .default, handler: { [weak self] (action) -> Void in
    guard let `self` = self else { return }
    print(self.data) }
)

使用[weak self]是为了在UIViewController解除初始化后不会出现保留周期。

您能提供完整的代码吗?特别是您检索数据的代码吗?对于数据,我首先声明了一行38 var data=[String:String](),然后在原始帖子的两个函数中添加数据(textViewDidChange,textFieldDidChange):第122行:数据[“内容”]=textView.text行128:data[“名称”]=textField.text我用更多的代码又添加了一个图像
var saveAction: UIAlertAction? = nil
saveAction = UIAlertAction(title:"Post", style: .default, handler: { [weak self] (action) -> Void in
    guard let `self` = self else { return }
    print(self.data) }
)