暂停循环,直到在Swift中获得UIAlertController的响应为止

时间:2019-03-13 11:27:34

标签: swift for-loop alert pause

我一直在尝试从set targetfile=%~1 set targetdir=%~2 echo %targetfile% echo %targetdir% xcopy /Y %targetfile% %targetdir% 的用户那里得到答案。问题是显示UIAlertController时代码仍在运行。我想显示警报,然后等待用户给出答案以继续代码。

UIAlertController

我无法将代码放入警报的动作内,因为它位于for循环内,因此它继续进行而没有性别。

1 个答案:

答案 0 :(得分:1)

您需要使用完成处理程序,因为用户输入是异步发生的,因此您不能使用同步return返回它。

与您的问题无关,但是您应该使用字符串插值而不是+来合并字符串。

func showPopUp(name:String, genderCompletion: @escaping (String)->()) {
    let alert = UIAlertController(title: "What are you \(name)?", message: nil, preferredStyle: .alert)

    alert.addAction(UIAlertAction(title: "Boy", style: .default, handler: { action in
        genderCompletion("Boy")
    }))

    alert.addAction(UIAlertAction(title: "Girl", style: .default, handler: { action in
        genderCompletion("Girl")
    }))

    self.present(alert, animated: true)
}

override func viewDidLoad() {
    super.viewDidLoad()
    let characters: [String] = ["John", "Tom", "Martha"]
    for ch in characters{
        showPopUp(name: ch, genderCompletion: { gender in
            print("\(ch) is a \(gender)")
        })
    }
}