在 Swift 中移动到下一个视图之前验证信息

Validating Information Before Moving to Next View in Swift

我有一个应用程序,在允许我的 iOS 应用程序进入下一个视图之前,我需要验证数据库中的一些信息(邮政编码)。我使用邮政编码项目导入数据库 Table 将所有有效的美国邮政编码,并且我希望在允许用户继续之前验证用户输入的邮政编码。如果邮政编码无效,我会在当前视图中保留它们并显示警告。我有一个 class 来验证邮政编码,但在加载下一个视图之前不会验证邮政编码。我一直倾向于使用完成处理程序,但我不确定那是否是我的 best/only 选项。提前致谢。 编辑: 以下是检索数据的全部class

protocol ZipCodeLocationProtocol: class {
    func zipCodeLocationDownloaded(zipLocation: Location)
} 

class RetrieveZipCodeLocation: NSObject, NSURLSessionDataDelegate {

// MARK: Properties
weak var delegate: ZipCodeLocationProtocol!
var data: NSMutableData = NSMutableData()


let urlPath: String = "xxxx"

func downloadZipCodeLocation(zipcode: Int)  {

        let path = self.urlPath + "?zipcode=\(zipcode)"
        let url: NSURL = NSURL(string: path)!
        var session: NSURLSession!
        let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
        session = NSURLSession(configuration: configuration, delegate: self, delegateQueue: nil)

        let task = session.dataTaskWithURL(url)

        task.resume()


}

func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveData data: NSData) {

    self.data.appendData(data)

}

func URLSession(session: NSURLSession, task: NSURLSessionTask, didCompleteWithError error: NSError?) {

    if error != nil {
        print("Failed to download data")
    }else {
        print("Data downloaded")
        self.parseJSON()
    }

}

func parseJSON() {
        var jsonResult: NSMutableArray = NSMutableArray()

        var location = Location(title: "TITLE", coordinate: CLLocationCoordinate2D(latitude: 0, longitude: 0))


        do {
            jsonResult = try NSJSONSerialization.JSONObjectWithData(self.data, options:[]) as! NSMutableArray

        } catch let error as NSError {
            print(error)

        }

        var jsonElement: NSDictionary = NSDictionary()

        for(var i = 0; i < jsonResult.count; i++) {

            jsonElement = jsonResult[i] as! NSDictionary

            let point = CLLocationCoordinate2D(latitude: (jsonElement["LATITUDE"] as! NSString).doubleValue, longitude: (jsonElement["LONGITUDE"] as! NSString).doubleValue)
            // Get Information
            location = Location(title: "TITLE", coordinate: point)



            self.delegate.zipCodeLocationDownloaded(location)
        }

}

我假设一个按钮会触发转至下一个视图。我还将假设该按钮已连接到目标操作功能。我还将假设您有获取邮政编码的代码,否则您将不得不为此提出一个单独的问题。

抛开假设,您需要在点击按钮时呈现 UIAlertController 而不是 转到下一个视图控制器。为此:

func buttonAction() {

    if verifyZipCode() {

        let alert = UIAlertController(title: "Hold Up", message: "That zip code is invalid.", preferredStyle: .Alert)

        let fixIt = UIAlertAction(title: "Fix It!", style: .Default, handler: nil) // handler could also contain code to make text field red or something interesting

        alert.addAction(fixIt)

        presentViewController(alert, animated: true, completion: nil)

    } else {
        // existing segue code
    }

}

func verifyZipCode() -> Bool {
    // Take text field text and verify zip code
}